summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamesh Nedunchezian <rameshnedunchezian@outlook.com>2021-04-27 10:56:32 +0530
committerRamesh Nedunchezian <rameshnedunchezian@outlook.com>2021-04-27 12:52:18 +0530
commit68b8676dc7f91a81a0512c4c344f4e7b5bab5563 (patch)
tree026b2123d59a706f44cad17a96737749448b9986
parentf680fcc9e771e4e798e4d2fa9aaf3708337c9289 (diff)
* doc/helm-figures/{*.plantuml, *.svg, *.png}: Class diagrams for helm classes
* doc/helm-figures: subdir to hold figures and screenshots used in Helm manual
-rw-r--r--doc/helm-M-x-class.plantuml29
-rw-r--r--doc/helm-absolute-time-timers-class.plantuml25
-rw-r--r--doc/helm-bookmark-find-files-class.plantuml35
-rw-r--r--doc/helm-bookmark-override-inheritor.plantuml14
-rw-r--r--doc/helm-browse-project-override-inheritor.plantuml16
-rw-r--r--doc/helm-browse-project-source.plantuml40
-rw-r--r--doc/helm-classes.plantuml164
-rw-r--r--doc/helm-epa.plantuml24
-rw-r--r--doc/helm-esh-source.plantuml26
-rw-r--r--doc/helm-eshell-history-source.plantuml27
-rw-r--r--doc/helm-fd-class.plantuml23
-rw-r--r--doc/helm-figures/helm-M-x-class.pngbin0 -> 23357 bytes
-rw-r--r--doc/helm-figures/helm-M-x-class.svg49
-rw-r--r--doc/helm-figures/helm-M-x.png (renamed from doc/helm-M-x.png)bin109306 -> 109306 bytes
-rw-r--r--doc/helm-figures/helm-absolute-time-timers-class.pngbin0 -> 22954 bytes
-rw-r--r--doc/helm-figures/helm-absolute-time-timers-class.svg45
-rw-r--r--doc/helm-figures/helm-bookmark-find-files-class.pngbin0 -> 35449 bytes
-rw-r--r--doc/helm-figures/helm-bookmark-find-files-class.svg60
-rw-r--r--doc/helm-figures/helm-bookmark-override-inheritor.pngbin0 -> 17276 bytes
-rw-r--r--doc/helm-figures/helm-bookmark-override-inheritor.svg31
-rw-r--r--doc/helm-figures/helm-browse-project-override-inheritor.pngbin0 -> 21655 bytes
-rw-r--r--doc/helm-figures/helm-browse-project-override-inheritor.svg35
-rw-r--r--doc/helm-figures/helm-browse-project-source.pngbin0 -> 35539 bytes
-rw-r--r--doc/helm-figures/helm-browse-project-source.svg62
-rw-r--r--doc/helm-figures/helm-classes.pngbin0 -> 210405 bytes
-rw-r--r--doc/helm-figures/helm-classes.svg280
-rw-r--r--doc/helm-figures/helm-epa.pngbin0 -> 18562 bytes
-rw-r--r--doc/helm-figures/helm-epa.svg41
-rw-r--r--doc/helm-figures/helm-esh-source.pngbin0 -> 19610 bytes
-rw-r--r--doc/helm-figures/helm-esh-source.svg43
-rw-r--r--doc/helm-figures/helm-eshell-history-source.pngbin0 -> 21656 bytes
-rw-r--r--doc/helm-figures/helm-eshell-history-source.svg44
-rw-r--r--doc/helm-figures/helm-fd-class.pngbin0 -> 17430 bytes
-rw-r--r--doc/helm-figures/helm-fd-class.svg40
-rw-r--r--doc/helm-figures/helm-file-cache.pngbin0 -> 21199 bytes
-rw-r--r--doc/helm-figures/helm-file-cache.svg48
-rw-r--r--doc/helm-figures/helm-files-dired-source.pngbin0 -> 20177 bytes
-rw-r--r--doc/helm-figures/helm-files-dired-source.svg43
-rw-r--r--doc/helm-figures/helm-files-in-current-dir-source.pngbin0 -> 22544 bytes
-rw-r--r--doc/helm-figures/helm-files-in-current-dir-source.svg46
-rw-r--r--doc/helm-figures/helm-gid-source.pngbin0 -> 19170 bytes
-rw-r--r--doc/helm-figures/helm-gid-source.svg43
-rw-r--r--doc/helm-figures/helm-grep-ag-class.pngbin0 -> 19781 bytes
-rw-r--r--doc/helm-figures/helm-grep-ag-class.svg45
-rw-r--r--doc/helm-figures/helm-grep-class.pngbin0 -> 20922 bytes
-rw-r--r--doc/helm-figures/helm-grep-class.svg49
-rw-r--r--doc/helm-figures/helm-idle-time-timers-class.pngbin0 -> 22192 bytes
-rw-r--r--doc/helm-figures/helm-idle-time-timers-class.svg45
-rw-r--r--doc/helm-figures/helm-imenu-source.pngbin0 -> 17460 bytes
-rw-r--r--doc/helm-figures/helm-imenu-source.svg41
-rw-r--r--doc/helm-figures/helm-info-source.pngbin0 -> 16013 bytes
-rw-r--r--doc/helm-figures/helm-info-source.svg37
-rw-r--r--doc/helm-figures/helm-list-el-package-source.pngbin0 -> 20816 bytes
-rw-r--r--doc/helm-figures/helm-list-el-package-source.svg42
-rw-r--r--doc/helm-figures/helm-locate-override-inheritor.pngbin0 -> 19435 bytes
-rw-r--r--doc/helm-figures/helm-locate-override-inheritor.svg35
-rw-r--r--doc/helm-figures/helm-locate-source.pngbin0 -> 28352 bytes
-rw-r--r--doc/helm-figures/helm-locate-source.svg52
-rw-r--r--doc/helm-figures/helm-locate-subdirs-source.pngbin0 -> 17177 bytes
-rw-r--r--doc/helm-figures/helm-locate-subdirs-source.svg36
-rw-r--r--doc/helm-figures/helm-mac-spotlight-source.pngbin0 -> 22635 bytes
-rw-r--r--doc/helm-figures/helm-mac-spotlight-source.svg42
-rw-r--r--doc/helm-figures/helm-moccur-class.pngbin0 -> 15257 bytes
-rw-r--r--doc/helm-figures/helm-moccur-class.svg34
-rw-r--r--doc/helm-figures/helm-recentf-source.pngbin0 -> 21315 bytes
-rw-r--r--doc/helm-figures/helm-recentf-source.svg47
-rw-r--r--doc/helm-figures/helm-semantic-source.pngbin0 -> 17430 bytes
-rw-r--r--doc/helm-figures/helm-semantic-source.svg39
-rw-r--r--doc/helm-figures/helm-source-async.pngbin0 -> 37460 bytes
-rw-r--r--doc/helm-figures/helm-source-async.svg55
-rw-r--r--doc/helm-figures/helm-source-basic-bookmarks.pngbin0 -> 25471 bytes
-rw-r--r--doc/helm-figures/helm-source-basic-bookmarks.svg49
-rw-r--r--doc/helm-figures/helm-source-buffers.pngbin0 -> 24976 bytes
-rw-r--r--doc/helm-figures/helm-source-buffers.svg53
-rw-r--r--doc/helm-figures/helm-source-dummy.pngbin0 -> 14277 bytes
-rw-r--r--doc/helm-figures/helm-source-dummy.svg34
-rw-r--r--doc/helm-figures/helm-source-ffiles.pngbin0 -> 22148 bytes
-rw-r--r--doc/helm-figures/helm-source-ffiles.svg53
-rw-r--r--doc/helm-figures/helm-source-filtered-bookmarks.pngbin0 -> 29566 bytes
-rw-r--r--doc/helm-figures/helm-source-filtered-bookmarks.svg52
-rw-r--r--doc/helm-figures/helm-source-in-buffer.pngbin0 -> 65819 bytes
-rw-r--r--doc/helm-figures/helm-source-in-buffer.svg74
-rw-r--r--doc/helm-figures/helm-source-in-file.pngbin0 -> 19409 bytes
-rw-r--r--doc/helm-figures/helm-source-in-file.svg42
-rw-r--r--doc/helm-figures/helm-source-session-class.pngbin0 -> 17102 bytes
-rw-r--r--doc/helm-figures/helm-source-session-class.svg36
-rw-r--r--doc/helm-figures/helm-source-sync.pngbin0 -> 74071 bytes
-rw-r--r--doc/helm-figures/helm-source-sync.svg78
-rw-r--r--doc/helm-figures/helm-source.pngbin0 -> 95044 bytes
-rw-r--r--doc/helm-figures/helm-source.svg107
-rw-r--r--doc/helm-figures/helm-type-bookmark.pngbin0 -> 22665 bytes
-rw-r--r--doc/helm-figures/helm-type-bookmark.svg39
-rw-r--r--doc/helm-figures/helm-type-buffer.pngbin0 -> 16837 bytes
-rw-r--r--doc/helm-figures/helm-type-buffer.svg34
-rw-r--r--doc/helm-figures/helm-type-command.pngbin0 -> 17726 bytes
-rw-r--r--doc/helm-figures/helm-type-command.svg36
-rw-r--r--doc/helm-figures/helm-type-file.pngbin0 -> 39813 bytes
-rw-r--r--doc/helm-figures/helm-type-file.svg54
-rw-r--r--doc/helm-figures/helm-type-function.pngbin0 -> 14828 bytes
-rw-r--r--doc/helm-figures/helm-type-function.svg33
-rw-r--r--doc/helm-figures/helm-type-timers.pngbin0 -> 21415 bytes
-rw-r--r--doc/helm-figures/helm-type-timers.svg39
-rw-r--r--doc/helm-file-cache.plantuml28
-rw-r--r--doc/helm-files-dired-source.plantuml23
-rw-r--r--doc/helm-files-in-current-dir-source.plantuml26
-rw-r--r--doc/helm-gid-source.plantuml26
-rw-r--r--doc/helm-grep-ag-class.plantuml28
-rw-r--r--doc/helm-grep-class.plantuml32
-rw-r--r--doc/helm-idle-time-timers-class.plantuml25
-rw-r--r--doc/helm-imenu-source.plantuml24
-rw-r--r--doc/helm-info-source.plantuml20
-rw-r--r--doc/helm-list-el-package-source.plantuml25
-rw-r--r--doc/helm-locate-override-inheritor.plantuml16
-rw-r--r--doc/helm-locate-source.plantuml30
-rw-r--r--doc/helm-locate-subdirs-source.plantuml19
-rw-r--r--doc/helm-mac-spotlight-source.plantuml22
-rw-r--r--doc/helm-moccur-class.plantuml17
-rw-r--r--doc/helm-recentf-source.plantuml27
-rw-r--r--doc/helm-semantic-source.plantuml22
-rw-r--r--doc/helm-source-async.plantuml28
-rw-r--r--doc/helm-source-basic-bookmarks.plantuml29
-rw-r--r--doc/helm-source-buffers.plantuml33
-rw-r--r--doc/helm-source-dummy.plantuml19
-rw-r--r--doc/helm-source-ffiles.plantuml36
-rw-r--r--doc/helm-source-filtered-bookmarks.plantuml30
-rw-r--r--doc/helm-source-in-buffer.plantuml39
-rw-r--r--doc/helm-source-in-file.plantuml25
-rw-r--r--doc/helm-source-session-class.plantuml19
-rw-r--r--doc/helm-source-sync.plantuml37
-rw-r--r--doc/helm-source.plantuml72
-rw-r--r--doc/helm-type-bookmark.plantuml20
-rw-r--r--doc/helm-type-buffer.plantuml17
-rw-r--r--doc/helm-type-command.plantuml19
-rw-r--r--doc/helm-type-file.plantuml25
-rw-r--r--doc/helm-type-function.plantuml18
-rw-r--r--doc/helm-type-timers.plantuml20
136 files changed, 3641 insertions, 0 deletions
diff --git a/doc/helm-M-x-class.plantuml b/doc/helm-M-x-class.plantuml
new file mode 100644
index 00000000..a90f96ca
--- /dev/null
+++ b/doc/helm-M-x-class.plantuml
@@ -0,0 +1,29 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-M-x-class'**\n\n
+"helm-source-sync" <|-- "helm-M-x-class"
+"helm-type-command" <|-- "helm-M-x-class"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-command"
+"helm-source" <|-- "helm-type-command"
+class "helm-source"
+class "helm-M-x-class" {
+ __ some interesting slots __
+ candidates
+ filtered-candidate-transformer
+ help-message
+ keymap
+ match-dynamic
+ match-strict
+ migemo
+ must-match
+ nomark
+ persistent-help
+}
+note right of "helm-M-x-class"
+ **helm-M-x-class**
+end note
+@enduml
diff --git a/doc/helm-absolute-time-timers-class.plantuml b/doc/helm-absolute-time-timers-class.plantuml
new file mode 100644
index 00000000..8f7cd5ff
--- /dev/null
+++ b/doc/helm-absolute-time-timers-class.plantuml
@@ -0,0 +1,25 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-absolute-time-timers-class'**\n\n
+"helm-source-sync" <|-- "helm-absolute-time-timers-class"
+"helm-type-timers" <|-- "helm-absolute-time-timers-class"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-timers"
+"helm-source" <|-- "helm-type-timers"
+class "helm-source"
+class "helm-absolute-time-timers-class" {
+ __ some interesting slots __
+ allow-dups
+ candidate-transformer
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-absolute-time-timers-class"
+ **helm-absolute-time-timers-class**
+end note
+@enduml
diff --git a/doc/helm-bookmark-find-files-class.plantuml b/doc/helm-bookmark-find-files-class.plantuml
new file mode 100644
index 00000000..571df225
--- /dev/null
+++ b/doc/helm-bookmark-find-files-class.plantuml
@@ -0,0 +1,35 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-bookmark-find-files-class'**\n\n
+"helm-source-filtered-bookmarks" <|-- "helm-bookmark-find-files-class"
+"helm-bookmark-override-inheritor" <|-- "helm-bookmark-find-files-class"
+class "helm-source-filtered-bookmarks"
+"helm-source-in-buffer" <|-- "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|-- "helm-source-filtered-bookmarks"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-bookmark"
+"helm-source" <|-- "helm-type-bookmark"
+class "helm-source"
+class "helm-bookmark-override-inheritor"
+"helm-source" <|-- "helm-bookmark-override-inheritor"
+class "helm-source"
+class "helm-bookmark-find-files-class" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filtered-candidate-transformer
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-bookmark-find-files-class"
+ **helm-bookmark-find-files-class**
+end note
+@enduml
diff --git a/doc/helm-bookmark-override-inheritor.plantuml b/doc/helm-bookmark-override-inheritor.plantuml
new file mode 100644
index 00000000..cf683e6c
--- /dev/null
+++ b/doc/helm-bookmark-override-inheritor.plantuml
@@ -0,0 +1,14 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-bookmark-override-inheritor'**\n\n
+"helm-source" <|-- "helm-bookmark-override-inheritor"
+class "helm-source"
+class "helm-bookmark-override-inheritor" {
+ __ some interesting slots __
+}
+note right of "helm-bookmark-override-inheritor"
+ **helm-bookmark-override-inheritor**
+end note
+"helm-bookmark-override-inheritor" <|-- "helm-bookmark-find-files-class"
+@enduml
diff --git a/doc/helm-browse-project-override-inheritor.plantuml b/doc/helm-browse-project-override-inheritor.plantuml
new file mode 100644
index 00000000..4f99b135
--- /dev/null
+++ b/doc/helm-browse-project-override-inheritor.plantuml
@@ -0,0 +1,16 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-browse-project-override-inheritor'**\n\n
+"helm-type-file" <|-- "helm-browse-project-override-inheritor"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-browse-project-override-inheritor" {
+ __ some interesting slots __
+}
+note right of "helm-browse-project-override-inheritor"
+ **helm-browse-project-override-inheritor**
+end note
+"helm-browse-project-override-inheritor" <|-- "helm-browse-project-source"
+@enduml
diff --git a/doc/helm-browse-project-source.plantuml b/doc/helm-browse-project-source.plantuml
new file mode 100644
index 00000000..1b83defe
--- /dev/null
+++ b/doc/helm-browse-project-source.plantuml
@@ -0,0 +1,40 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-browse-project-source'**\n\n
+"helm-source-in-buffer" <|-- "helm-browse-project-source"
+"helm-browse-project-override-inheritor" <|-- "helm-browse-project-source"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-browse-project-override-inheritor"
+"helm-type-file" <|-- "helm-browse-project-override-inheritor"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-browse-project-source" {
+ Class to define a source in
+ `helm-browse-project' handling
+ non
+ ==
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filter-one-by-one
+ get-line
+ match
+ match-part
+ migemo
+ root-dir
+ search
+ search-strict
+ volatile
+}
+note right of "helm-browse-project-source"
+ **helm-browse-project-source**:
+ Class to define a source in
+ `helm-browse-project' handling
+ non
+end note
+@enduml
diff --git a/doc/helm-classes.plantuml b/doc/helm-classes.plantuml
new file mode 100644
index 00000000..908b192d
--- /dev/null
+++ b/doc/helm-classes.plantuml
@@ -0,0 +1,164 @@
+@startuml
+skinparam classFontStyle bold
+skinparam classBackGroundColor #fbfb77
+skinparam TitleFontStyle bold
+skinparam TitleFontSize 24
+title Classes in library 'Helm'\n\n
+class "helm-locate-source" {
+}
+"helm-source-async" <|-- "helm-locate-source"
+"helm-locate-override-inheritor" <|-- "helm-locate-source"
+class "helm-locate-override-inheritor" {
+}
+"helm-type-file" <|-- "helm-locate-override-inheritor"
+class "helm-file-cache" {
+}
+"helm-source-in-buffer" <|-- "helm-file-cache"
+"helm-type-file" <|-- "helm-file-cache"
+class "helm-browse-project-source" {
+ Class to define a source in
+ `helm-browse-project' handling
+ non
+ ==
+}
+"helm-source-in-buffer" <|-- "helm-browse-project-source"
+"helm-browse-project-override-inheritor" <|-- "helm-browse-project-source"
+class "helm-browse-project-override-inheritor" {
+}
+"helm-type-file" <|-- "helm-browse-project-override-inheritor"
+class "helm-fd-class" {
+}
+"helm-source-async" <|-- "helm-fd-class"
+class "helm-absolute-time-timers-class" {
+}
+"helm-source-sync" <|-- "helm-absolute-time-timers-class"
+"helm-type-timers" <|-- "helm-absolute-time-timers-class"
+class "helm-M-x-class" {
+}
+"helm-source-sync" <|-- "helm-M-x-class"
+"helm-type-command" <|-- "helm-M-x-class"
+class "helm-source-buffers" {
+}
+"helm-source-sync" <|-- "helm-source-buffers"
+"helm-type-buffer" <|-- "helm-source-buffers"
+class "helm-bookmark-find-files-class" {
+}
+"helm-source-filtered-bookmarks" <|-- "helm-bookmark-find-files-class"
+"helm-bookmark-override-inheritor" <|-- "helm-bookmark-find-files-class"
+class "helm-bookmark-override-inheritor" {
+}
+"helm-source" <|-- "helm-bookmark-override-inheritor"
+class "helm-source-filtered-bookmarks" {
+}
+"helm-source-in-buffer" <|-- "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|-- "helm-source-filtered-bookmarks"
+class "helm-source-basic-bookmarks" {
+}
+"helm-source-in-buffer" <|-- "helm-source-basic-bookmarks"
+"helm-type-bookmark" <|-- "helm-source-basic-bookmarks"
+class "helm-mac-spotlight-source" {
+}
+"helm-source-async" <|-- "helm-mac-spotlight-source"
+"helm-type-file" <|-- "helm-mac-spotlight-source"
+class "helm-source-session-class" {
+}
+"helm-source-sync" <|-- "helm-source-session-class"
+class "helm-files-dired-source" {
+}
+"helm-source-sync" <|-- "helm-files-dired-source"
+"helm-type-file" <|-- "helm-files-dired-source"
+class "helm-type-timers" {
+ A class to define helm type
+ timers.
+ ==
+}
+"helm-source" <|-- "helm-type-timers"
+class "helm-type-command" {
+ A class to define helm type
+ command.
+ ==
+}
+"helm-source" <|-- "helm-type-command"
+class "helm-type-buffer" {
+ A class to define type buffer.
+ ==
+}
+"helm-source" <|-- "helm-type-buffer"
+class "helm-type-bookmark" {
+ A class to define type
+ bookmarks.
+ ==
+}
+"helm-source" <|-- "helm-type-bookmark"
+class "helm-type-file" {
+ A class to define helm type
+ file.
+ ==
+}
+"helm-source" <|-- "helm-type-file"
+class "helm-source-in-file" {
+ The contents of the FILE will
+ be used as candidates in
+ buffer.
+ ==
+}
+"helm-source-in-buffer" <|-- "helm-source-in-file"
+class "helm-source-dummy" {
+}
+"helm-source" <|-- "helm-source-dummy"
+class "helm-source-in-buffer" {
+ Use this source to make helm
+ sources storing candidates
+ inside a buffer.
+ ==
+}
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source-async" {
+ Use this class to define a
+ helm source calling an
+ external process.
+ ==
+}
+"helm-source" <|-- "helm-source-async"
+class "helm-source-sync" {
+ Use this class to make helm
+ sources using a list of
+ candidates.
+ ==
+}
+"helm-source" <|-- "helm-source-sync"
+class "helm-source" {
+ Main interface to define helm
+ sources.
+ ==
+}
+package "Other classes similar to 'helm-fd-class'" {
+ "helm-fd-class" -down[hidden]-> "helm-grep-class"
+ "helm-grep-class" -down[hidden]-> "helm-grep-ag-class"
+ "helm-grep-ag-class" -down[hidden]-> "helm-gid-source"
+}
+package "Other classes similar to 'helm-absolute-time-timers-class'" {
+ "helm-absolute-time-timers-class" -down[hidden]-> "helm-idle-time-timers-class"
+}
+package "Other classes similar to 'helm-source-session-class'" {
+ "helm-source-session-class" -down[hidden]-> "helm-epa"
+ "helm-epa" -down[hidden]-> "helm-esh-source"
+ "helm-esh-source" -down[hidden]-> "helm-eshell-history-source"
+ "helm-eshell-history-source" -down[hidden]-> "helm-source-ffiles"
+ "helm-source-ffiles" -down[hidden]-> "helm-imenu-source"
+}
+package "Other classes similar to 'helm-files-dired-source'" {
+ "helm-files-dired-source" -down[hidden]-> "helm-recentf-source"
+ "helm-recentf-source" -down[hidden]-> "helm-files-in-current-dir-source"
+}
+package "Other classes similar to 'helm-source-in-file'" {
+ "helm-source-in-file" -down[hidden]-> "helm-list-el-package-source"
+ "helm-list-el-package-source" -down[hidden]-> "helm-info-source"
+ "helm-info-source" -down[hidden]-> "helm-locate-subdirs-source"
+ "helm-locate-subdirs-source" -down[hidden]-> "helm-moccur-class"
+ "helm-moccur-class" -down[hidden]-> "helm-semantic-source"
+}
+package "Other classes similar to 'helm-source-dummy'" {
+ "helm-source-dummy" -down[hidden]-> "helm-type-function"
+}
+@enduml
diff --git a/doc/helm-epa.plantuml b/doc/helm-epa.plantuml
new file mode 100644
index 00000000..e36a1d93
--- /dev/null
+++ b/doc/helm-epa.plantuml
@@ -0,0 +1,24 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-epa'**\n\n
+"helm-source-sync" <|-- "helm-epa"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-epa" {
+ Allow building helm sources
+ for GPG keys.
+ ==
+ __ some interesting slots __
+ init
+ candidates
+ keymap
+ mode-line
+}
+note right of "helm-epa"
+ **helm-epa**:
+ Allow building helm sources
+ for GPG keys.
+end note
+@enduml
diff --git a/doc/helm-esh-source.plantuml b/doc/helm-esh-source.plantuml
new file mode 100644
index 00000000..56695822
--- /dev/null
+++ b/doc/helm-esh-source.plantuml
@@ -0,0 +1,26 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-esh-source'**\n\n
+"helm-source-sync" <|-- "helm-esh-source"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-esh-source" {
+ Helm class to define source
+ for Eshell completion.
+ ==
+ __ some interesting slots __
+ init
+ action
+ candidates
+ filtered-candidate-transformer
+ nohighlight
+ persistent-action
+}
+note right of "helm-esh-source"
+ **helm-esh-source**:
+ Helm class to define source
+ for Eshell completion.
+end note
+@enduml
diff --git a/doc/helm-eshell-history-source.plantuml b/doc/helm-eshell-history-source.plantuml
new file mode 100644
index 00000000..705822b6
--- /dev/null
+++ b/doc/helm-eshell-history-source.plantuml
@@ -0,0 +1,27 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-eshell-history-source'**\n\n
+"helm-source-sync" <|-- "helm-eshell-history-source"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-eshell-history-source" {
+ Helm class to define source
+ for Eshell history.
+ ==
+ __ some interesting slots __
+ init
+ action
+ candidate-number-limit
+ candidates
+ keymap
+ multiline
+ nomark
+}
+note right of "helm-eshell-history-source"
+ **helm-eshell-history-source**:
+ Helm class to define source
+ for Eshell history.
+end note
+@enduml
diff --git a/doc/helm-fd-class.plantuml b/doc/helm-fd-class.plantuml
new file mode 100644
index 00000000..7b128253
--- /dev/null
+++ b/doc/helm-fd-class.plantuml
@@ -0,0 +1,23 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-fd-class'**\n\n
+"helm-source-async" <|-- "helm-fd-class"
+class "helm-source-async"
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-fd-class" {
+ __ some interesting slots __
+ action
+ candidate-number-limit
+ candidates-process
+ filtered-candidate-transformer
+ help-message
+ keymap
+ nohighlight
+ requires-pattern
+}
+note right of "helm-fd-class"
+ **helm-fd-class**
+end note
+@enduml
diff --git a/doc/helm-figures/helm-M-x-class.png b/doc/helm-figures/helm-M-x-class.png
new file mode 100644
index 00000000..0cc00239
--- /dev/null
+++ b/doc/helm-figures/helm-M-x-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-M-x-class.svg b/doc/helm-figures/helm-M-x-class.svg
new file mode 100644
index 00000000..8578c890
--- /dev/null
+++ b/doc/helm-figures/helm-M-x-class.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="503px" preserveAspectRatio="none" style="width:453px;height:503px;" version="1.1" viewBox="0 0 453 503" width="453px" zoomAndPan="magnify"><defs><filter height="300%" id="f1h4wo8n7b46tq" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="109.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="163" x="148" y="37.6611">'helm-M-x-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="232.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="232.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f1h4wo8n7b46tq)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[9bb915cdd04b5f6bf4c2c1633cbdfbdc]
+class helm-M-x-class--><rect fill="#FEFECE" filter="url(#f1h4wo8n7b46tq)" height="184.8516" id="helm-M-x-class" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="92" y="307.8125"/><ellipse cx="128.6" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M131.5688,329.4531 Q130.9906,329.75 130.35,329.8906 Q129.7094,330.0469 129.0063,330.0469 Q126.5063,330.0469 125.1781,328.4063 Q123.8656,326.75 123.8656,323.625 Q123.8656,320.5 125.1781,318.8438 Q126.5063,317.1875 129.0063,317.1875 Q129.7094,317.1875 130.35,317.3438 Q131.0063,317.5 131.5688,317.7969 L131.5688,320.5156 Q130.9438,319.9375 130.35,319.6719 Q129.7563,319.3906 129.1313,319.3906 Q127.7875,319.3906 127.1,320.4688 Q126.4125,321.5313 126.4125,323.625 Q126.4125,325.7188 127.1,326.7969 Q127.7875,327.8594 129.1313,327.8594 Q129.7563,327.8594 130.35,327.5938 Q130.9438,327.3125 131.5688,326.7344 L131.5688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="147.4" y="327.9668">helm-M-x-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="93" x2="275" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="98" y="370.8276">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="98" y="383.6323">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="98" y="396.437">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="98" y="409.2417">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="98" y="422.0464">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="98" y="434.8511">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="98" y="447.6558">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="98" y="460.4604">must-match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="98" y="473.2651">nomark</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="98" y="486.0698">persistent-help</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="93" x2="120.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="120.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="247.5" x2="275" y1="354.2148" y2="354.2148"/><!--MD5=[beabceb98eda0d1152a0edf286dc7000]
+class helm-type-command--><rect fill="#FEFECE" filter="url(#f1h4wo8n7b46tq)" height="48" id="helm-type-command" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="197.5" y="199.8125"/><ellipse cx="212.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M215.4688,221.4531 Q214.8906,221.75 214.25,221.8906 Q213.6094,222.0469 212.9063,222.0469 Q210.4063,222.0469 209.0781,220.4063 Q207.7656,218.75 207.7656,215.625 Q207.7656,212.5 209.0781,210.8438 Q210.4063,209.1875 212.9063,209.1875 Q213.6094,209.1875 214.25,209.3438 Q214.9063,209.5 215.4688,209.7969 L215.4688,212.5156 Q214.8438,211.9375 214.25,211.6719 Q213.6563,211.3906 213.0313,211.3906 Q211.6875,211.3906 211,212.4688 Q210.3125,213.5313 210.3125,215.625 Q210.3125,217.7188 211,218.7969 Q211.6875,219.8594 213.0313,219.8594 Q213.6563,219.8594 214.25,219.5938 Q214.8438,219.3125 215.4688,218.7344 L215.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="226.5" y="219.9668">helm-type-command</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="371.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="371.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1h4wo8n7b46tq)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="124.5" y="91.8125"/><ellipse cx="139.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M142.4688,113.4531 Q141.8906,113.75 141.25,113.8906 Q140.6094,114.0469 139.9063,114.0469 Q137.4063,114.0469 136.0781,112.4063 Q134.7656,110.75 134.7656,107.625 Q134.7656,104.5 136.0781,102.8438 Q137.4063,101.1875 139.9063,101.1875 Q140.6094,101.1875 141.25,101.3438 Q141.9063,101.5 142.4688,101.7969 L142.4688,104.5156 Q141.8438,103.9375 141.25,103.6719 Q140.6563,103.3906 140.0313,103.3906 Q138.6875,103.3906 138,104.4688 Q137.3125,105.5313 137.3125,107.625 Q137.3125,109.7188 138,110.7969 Q138.6875,111.8594 140.0313,111.8594 Q140.6563,111.8594 141.25,111.5938 Q141.8438,111.3125 142.4688,110.7344 L142.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="153.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="125.5" x2="242.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="125.5" x2="242.5" y1="131.8125" y2="131.8125"/><path d="M311,387.8125 L311,396.3125 L276.25,400.3125 L311,404.3125 L311,412.9453 A0,0 0 0 0 311,412.9453 L441,412.9453 A0,0 0 0 0 441,412.9453 L441,397.8125 L431,387.8125 L311,387.8125 A0,0 0 0 0 311,387.8125 " fill="#FBFB77" filter="url(#f1h4wo8n7b46tq)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M431,387.8125 L431,397.8125 L441,397.8125 L431,387.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="109" x="317" y="404.8794">helm-M-x-class</text><!--MD5=[9f4d7494bd3425cac0331b57ecd466c2]
+reverse link helm-source-sync to helm-M-x-class--><path d="M107.4,265.6325 C114.68,278.3525 123.03,292.9225 131.48,307.6625 " fill="none" id="helm-source-sync&lt;-helm-M-x-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="101.15,268.8225,97.28,247.9825,113.3,261.8525,101.15,268.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4ac71f6dd5cea0c13d2b9c31bc00a812]
+reverse link helm-type-command to helm-M-x-class--><path d="M261.37,265.6325 C254.01,278.3525 245.58,292.9225 237.05,307.6625 " fill="none" id="helm-type-command&lt;-helm-M-x-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="255.51,261.7925,271.59,247.9825,267.63,268.8025,255.51,261.7925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M148.38,154.5625 C134.24,169.5525 118.42,186.3225 106,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="143.49,149.5525,162.3,139.8125,153.67,159.1625,143.49,149.5525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[fde896bcedf28e4926ec99232971bb19]
+reverse link helm-source to helm-type-command--><path d="M219.97,154.5625 C234.26,169.5525 250.23,186.3225 262.78,199.4925 " fill="none" id="helm-source&lt;-helm-type-command" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="214.64,159.1225,205.92,139.8125,224.78,149.4625,214.64,159.1225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[fc36af632e2e01f2d6b385b81ddc32d9]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-M-x-class'**\n\n
+"helm-source-sync" <|- - "helm-M-x-class"
+"helm-type-command" <|- - "helm-M-x-class"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-command"
+"helm-source" <|- - "helm-type-command"
+class "helm-source"
+class "helm-M-x-class" {
+ __ some interesting slots __
+ candidates
+ filtered-candidate-transformer
+ help-message
+ keymap
+ match-dynamic
+ match-strict
+ migemo
+ must-match
+ nomark
+ persistent-help
+}
+note right of "helm-M-x-class"
+ **helm-M-x-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-M-x.png b/doc/helm-figures/helm-M-x.png
index ed0ea23f..ed0ea23f 100644
--- a/doc/helm-M-x.png
+++ b/doc/helm-figures/helm-M-x.png
Binary files differ
diff --git a/doc/helm-figures/helm-absolute-time-timers-class.png b/doc/helm-figures/helm-absolute-time-timers-class.png
new file mode 100644
index 00000000..cc199336
--- /dev/null
+++ b/doc/helm-figures/helm-absolute-time-timers-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-absolute-time-timers-class.svg b/doc/helm-figures/helm-absolute-time-timers-class.svg
new file mode 100644
index 00000000..92c12460
--- /dev/null
+++ b/doc/helm-figures/helm-absolute-time-timers-class.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="452px" preserveAspectRatio="none" style="width:615px;height:452px;" version="1.1" viewBox="0 0 615 452" width="615px" zoomAndPan="magnify"><defs><filter height="300%" id="frhsxyrmuci7j" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="190.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="338" x="141.5" y="37.6611">'helm-absolute-time-timers-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="313.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="313.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#frhsxyrmuci7j)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[b0e60113aba2bebbe59d6cbba30a4a7f]
+class helm-absolute-time-timers-class--><rect fill="#FEFECE" filter="url(#frhsxyrmuci7j)" height="133.6328" id="helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="261" x="48.5" y="307.8125"/><ellipse cx="63.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M66.4688,329.4531 Q65.8906,329.75 65.25,329.8906 Q64.6094,330.0469 63.9063,330.0469 Q61.4063,330.0469 60.0781,328.4063 Q58.7656,326.75 58.7656,323.625 Q58.7656,320.5 60.0781,318.8438 Q61.4063,317.1875 63.9063,317.1875 Q64.6094,317.1875 65.25,317.3438 Q65.9063,317.5 66.4688,317.7969 L66.4688,320.5156 Q65.8438,319.9375 65.25,319.6719 Q64.6563,319.3906 64.0313,319.3906 Q62.6875,319.3906 62,320.4688 Q61.3125,321.5313 61.3125,323.625 Q61.3125,325.7188 62,326.7969 Q62.6875,327.8594 64.0313,327.8594 Q64.6563,327.8594 65.25,327.5938 Q65.8438,327.3125 66.4688,326.7344 L66.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="229" x="77.5" y="327.9668">helm-absolute-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="49.5" x2="308.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="61" x="54.5" y="370.8276">allow-dups</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="128" x="54.5" y="383.6323">candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="54.5" y="396.437">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="54.5" y="409.2417">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="54.5" y="422.0464">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="54.5" y="434.8511">migemo</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="49.5" x2="115.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="115.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="242.5" x2="308.5" y1="354.2148" y2="354.2148"/><!--MD5=[d89fbe3a66aa0ad58442d3fbb0e3c04d]
+class helm-type-timers--><rect fill="#FEFECE" filter="url(#frhsxyrmuci7j)" height="48" id="helm-type-timers" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="197.5" y="199.8125"/><ellipse cx="212.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M215.4688,221.4531 Q214.8906,221.75 214.25,221.8906 Q213.6094,222.0469 212.9063,222.0469 Q210.4063,222.0469 209.0781,220.4063 Q207.7656,218.75 207.7656,215.625 Q207.7656,212.5 209.0781,210.8438 Q210.4063,209.1875 212.9063,209.1875 Q213.6094,209.1875 214.25,209.3438 Q214.9063,209.5 215.4688,209.7969 L215.4688,212.5156 Q214.8438,211.9375 214.25,211.6719 Q213.6563,211.3906 213.0313,211.3906 Q211.6875,211.3906 211,212.4688 Q210.3125,213.5313 210.3125,215.625 Q210.3125,217.7188 211,218.7969 Q211.6875,219.8594 213.0313,219.8594 Q213.6563,219.8594 214.25,219.5938 Q214.8438,219.3125 215.4688,218.7344 L215.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="226.5" y="219.9668">helm-type-timers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="349.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="349.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#frhsxyrmuci7j)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="119.5" y="91.8125"/><ellipse cx="134.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M137.4688,113.4531 Q136.8906,113.75 136.25,113.8906 Q135.6094,114.0469 134.9063,114.0469 Q132.4063,114.0469 131.0781,112.4063 Q129.7656,110.75 129.7656,107.625 Q129.7656,104.5 131.0781,102.8438 Q132.4063,101.1875 134.9063,101.1875 Q135.6094,101.1875 136.25,101.3438 Q136.9063,101.5 137.4688,101.7969 L137.4688,104.5156 Q136.8438,103.9375 136.25,103.6719 Q135.6563,103.3906 135.0313,103.3906 Q133.6875,103.3906 133,104.4688 Q132.3125,105.5313 132.3125,107.625 Q132.3125,109.7188 133,110.7969 Q133.6875,111.8594 135.0313,111.8594 Q135.6563,111.8594 136.25,111.5938 Q136.8438,111.3125 137.4688,110.7344 L137.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="148.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="120.5" x2="237.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="120.5" x2="237.5" y1="131.8125" y2="131.8125"/><path d="M345,362.3125 L345,370.8125 L309.5,374.8125 L345,378.8125 L345,387.4453 A0,0 0 0 0 345,387.4453 L603,387.4453 A0,0 0 0 0 603,387.4453 L603,372.3125 L593,362.3125 L345,362.3125 A0,0 0 0 0 345,362.3125 " fill="#FBFB77" filter="url(#frhsxyrmuci7j)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M593,362.3125 L593,372.3125 L603,372.3125 L593,362.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="237" x="351" y="379.3794">helm-absolute-time-timers-class</text><!--MD5=[2dab3ea9bdbd523a70d6b4309b981517]
+reverse link helm-source-sync to helm-absolute-time-timers-class--><path d="M109.73,265.1725 C118.07,278.2525 127.56,293.1325 136.78,307.5925 " fill="none" id="helm-source-sync&lt;-helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="103.69,268.7225,98.84,248.0925,115.5,261.1925,103.69,268.7225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[69966f233324ab1b41ca6bc5703528d7]
+reverse link helm-type-timers to helm-absolute-time-timers-class--><path d="M248.27,265.1725 C239.93,278.2525 230.44,293.1325 221.22,307.5925 " fill="none" id="helm-type-timers&lt;-helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="242.5,261.1925,259.16,248.0925,254.31,268.7225,242.5,261.1925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M144.74,155.0425 C131.41,169.9125 116.58,186.4625 104.9,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="139.83,150.0325,158.39,139.8125,150.25,159.3825,139.83,150.0325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[687fc8ec140e945488f732dae3c46e2b]
+reverse link helm-source to helm-type-timers--><path d="M213.26,155.0425 C226.59,169.9125 241.42,186.4625 253.1,199.4925 " fill="none" id="helm-source&lt;-helm-type-timers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="207.75,159.3825,199.61,139.8125,218.17,150.0325,207.75,159.3825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[710b4b6be57474b21b724acdc029eeb8]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-absolute-time-timers-class'**\n\n
+"helm-source-sync" <|- - "helm-absolute-time-timers-class"
+"helm-type-timers" <|- - "helm-absolute-time-timers-class"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-timers"
+"helm-source" <|- - "helm-type-timers"
+class "helm-source"
+class "helm-absolute-time-timers-class" {
+ __ some interesting slots __
+ allow-dups
+ candidate-transformer
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-absolute-time-timers-class"
+ **helm-absolute-time-timers-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-bookmark-find-files-class.png b/doc/helm-figures/helm-bookmark-find-files-class.png
new file mode 100644
index 00000000..41ed584b
--- /dev/null
+++ b/doc/helm-figures/helm-bookmark-find-files-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-bookmark-find-files-class.svg b/doc/helm-figures/helm-bookmark-find-files-class.svg
new file mode 100644
index 00000000..a6bf3a11
--- /dev/null
+++ b/doc/helm-figures/helm-bookmark-find-files-class.svg
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="611px" preserveAspectRatio="none" style="width:712px;height:611px;" version="1.1" viewBox="0 0 712 611" width="712px" zoomAndPan="magnify"><defs><filter height="300%" id="fmq7r5c9ok2jd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="239.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="323" x="198" y="37.6611">'helm-bookmark-find-files-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="362.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="362.5" y="79.5674"/><!--MD5=[1b5f639ef80bc5f44c8cc4600bf3e2e4]
+class helm-source-filtered-bookmarks--><rect fill="#FEFECE" filter="url(#fmq7r5c9ok2jd)" height="48" id="helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="259" x="313.5" y="307.8125"/><ellipse cx="328.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M331.4688,329.4531 Q330.8906,329.75 330.25,329.8906 Q329.6094,330.0469 328.9063,330.0469 Q326.4063,330.0469 325.0781,328.4063 Q323.7656,326.75 323.7656,323.625 Q323.7656,320.5 325.0781,318.8438 Q326.4063,317.1875 328.9063,317.1875 Q329.6094,317.1875 330.25,317.3438 Q330.9063,317.5 331.4688,317.7969 L331.4688,320.5156 Q330.8438,319.9375 330.25,319.6719 Q329.6563,319.3906 329.0313,319.3906 Q327.6875,319.3906 327,320.4688 Q326.3125,321.5313 326.3125,323.625 Q326.3125,325.7188 327,326.7969 Q327.6875,327.8594 329.0313,327.8594 Q329.6563,327.8594 330.25,327.5938 Q330.8438,327.3125 331.4688,326.7344 L331.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="227" x="342.5" y="327.9668">helm-source-filtered-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="314.5" x2="571.5" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="314.5" x2="571.5" y1="347.8125" y2="347.8125"/><!--MD5=[f325aa84e92746ce6f670c419a69be3e]
+class helm-bookmark-find-files-class--><rect fill="#FEFECE" filter="url(#fmq7r5c9ok2jd)" height="184.8516" id="helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.5;" width="249" x="167.5" y="415.8125"/><ellipse cx="182.5" cy="431.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M185.4688,437.4531 Q184.8906,437.75 184.25,437.8906 Q183.6094,438.0469 182.9063,438.0469 Q180.4063,438.0469 179.0781,436.4063 Q177.7656,434.75 177.7656,431.625 Q177.7656,428.5 179.0781,426.8438 Q180.4063,425.1875 182.9063,425.1875 Q183.6094,425.1875 184.25,425.3438 Q184.9063,425.5 185.4688,425.7969 L185.4688,428.5156 Q184.8438,427.9375 184.25,427.6719 Q183.6563,427.3906 183.0313,427.3906 Q181.6875,427.3906 181,428.4688 Q180.3125,429.5313 180.3125,431.625 Q180.3125,433.7188 181,434.7969 Q181.6875,435.8594 183.0313,435.8594 Q183.6563,435.8594 184.25,435.5938 Q184.8438,435.3125 185.4688,434.7344 L185.4688,437.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="196.5" y="435.9668">helm-bookmark-find-files-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="168.5" x2="415.5" y1="447.8125" y2="447.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="173.5" y="478.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="173.5" y="491.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="173.5" y="504.437">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="173.5" y="517.2417">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="173.5" y="530.0464">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="173.5" y="542.8511">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="173.5" y="555.6558">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="173.5" y="568.4604">search</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="72" x="173.5" y="581.2651">search-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="173.5" y="594.0698">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="168.5" x2="228.5" y1="462.2148" y2="462.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="228.5" y="465.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="355.5" x2="415.5" y1="462.2148" y2="462.2148"/><!--MD5=[1a4f21f1efd4e6c0dd550e1e5e387e5d]
+class helm-bookmark-override-inheritor--><rect fill="#FEFECE" filter="url(#fmq7r5c9ok2jd)" height="48" id="helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="272" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="35" y="327.9668">helm-bookmark-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="277" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="277" y1="347.8125" y2="347.8125"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#fmq7r5c9ok2jd)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="195.5" y="199.8125"/><ellipse cx="210.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M213.4688,221.4531 Q212.8906,221.75 212.25,221.8906 Q211.6094,222.0469 210.9063,222.0469 Q208.4063,222.0469 207.0781,220.4063 Q205.7656,218.75 205.7656,215.625 Q205.7656,212.5 207.0781,210.8438 Q208.4063,209.1875 210.9063,209.1875 Q211.6094,209.1875 212.25,209.3438 Q212.9063,209.5 213.4688,209.7969 L213.4688,212.5156 Q212.8438,211.9375 212.25,211.6719 Q211.6563,211.3906 211.0313,211.3906 Q209.6875,211.3906 209,212.4688 Q208.3125,213.5313 208.3125,215.625 Q208.3125,217.7188 209,218.7969 Q209.6875,219.8594 211.0313,219.8594 Q211.6563,219.8594 212.25,219.5938 Q212.8438,219.3125 213.4688,218.7344 L213.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="224.5" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="196.5" x2="379.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="196.5" x2="379.5" y1="239.8125" y2="239.8125"/><!--MD5=[257e0c9decabcf296fc5e077c0fe3da7]
+class helm-type-bookmark--><rect fill="#FEFECE" filter="url(#fmq7r5c9ok2jd)" height="48" id="helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="415" y="199.8125"/><ellipse cx="430" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M432.9688,221.4531 Q432.3906,221.75 431.75,221.8906 Q431.1094,222.0469 430.4063,222.0469 Q427.9063,222.0469 426.5781,220.4063 Q425.2656,218.75 425.2656,215.625 Q425.2656,212.5 426.5781,210.8438 Q427.9063,209.1875 430.4063,209.1875 Q431.1094,209.1875 431.75,209.3438 Q432.4063,209.5 432.9688,209.7969 L432.9688,212.5156 Q432.3438,211.9375 431.75,211.6719 Q431.1563,211.3906 430.5313,211.3906 Q429.1875,211.3906 428.5,212.4688 Q427.8125,213.5313 427.8125,215.625 Q427.8125,217.7188 428.5,218.7969 Q429.1875,219.8594 430.5313,219.8594 Q431.1563,219.8594 431.75,219.5938 Q432.3438,219.3125 432.9688,218.7344 L432.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="146" x="444" y="219.9668">helm-type-bookmark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="416" x2="592" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="416" x2="592" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fmq7r5c9ok2jd)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="228.5" y="91.8125"/><ellipse cx="243.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M246.4688,113.4531 Q245.8906,113.75 245.25,113.8906 Q244.6094,114.0469 243.9063,114.0469 Q241.4063,114.0469 240.0781,112.4063 Q238.7656,110.75 238.7656,107.625 Q238.7656,104.5 240.0781,102.8438 Q241.4063,101.1875 243.9063,101.1875 Q244.6094,101.1875 245.25,101.3438 Q245.9063,101.5 246.4688,101.7969 L246.4688,104.5156 Q245.8438,103.9375 245.25,103.6719 Q244.6563,103.3906 244.0313,103.3906 Q242.6875,103.3906 242,104.4688 Q241.3125,105.5313 241.3125,107.625 Q241.3125,109.7188 242,110.7969 Q242.6875,111.8594 244.0313,111.8594 Q244.6563,111.8594 245.25,111.5938 Q245.8438,111.3125 246.4688,110.7344 L246.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="257.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="229.5" x2="346.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="229.5" x2="346.5" y1="131.8125" y2="131.8125"/><path d="M451.5,495.8125 L451.5,504.3125 L416.53,508.3125 L451.5,512.3125 L451.5,520.9453 A0,0 0 0 0 451.5,520.9453 L700.5,520.9453 A0,0 0 0 0 700.5,520.9453 L700.5,505.8125 L690.5,495.8125 L451.5,495.8125 A0,0 0 0 0 451.5,495.8125 " fill="#FBFB77" filter="url(#fmq7r5c9ok2jd)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M690.5,495.8125 L690.5,505.8125 L700.5,505.8125 L690.5,495.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="228" x="457.5" y="512.8794">helm-bookmark-find-files-class</text><!--MD5=[97418b6d899cd58bad59cfd77e9ec07d]
+reverse link helm-source-filtered-bookmarks to helm-bookmark-find-files-class--><path d="M409.6,371.4125 C398.15,384.6325 384.81,400.0525 371.31,415.6625 " fill="none" id="helm-source-filtered-bookmarks&lt;-helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="404.57,366.5325,422.95,355.9825,415.15,375.6925,404.57,366.5325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9dfed791578fb3f1a7675a563d26d6dc]
+reverse link helm-bookmark-override-inheritor to helm-bookmark-find-files-class--><path d="M175.18,371.4125 C186.55,384.6325 199.8,400.0525 213.21,415.6625 " fill="none" id="helm-bookmark-override-inheritor&lt;-helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="169.65,375.7125,161.92,355.9825,180.26,366.5925,169.65,375.7125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[38d3222c9d6413d0e8be51642b02db5a]
+reverse link helm-source-in-buffer to helm-source-filtered-bookmarks--><path d="M338.47,259.3225 C361.63,275.1625 388.48,293.5225 409.17,307.6725 " fill="none" id="helm-source-in-buffer&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="334.19,264.8825,321.63,247.8125,342.09,253.3225,334.19,264.8825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[36bf56344c9fb562b92d13c27d56d2e6]
+reverse link helm-type-bookmark to helm-source-filtered-bookmarks--><path d="M480.63,265.4225 C472.44,279.6625 463.52,295.1625 456.42,307.4925 " fill="none" id="helm-type-bookmark&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="474.72,261.6525,490.76,247.8125,486.86,268.6425,474.72,261.6525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M288,159.8325 C288,173.3925 288,187.8525 288,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="281,159.8125,288,139.8125,295,159.8125,281,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b3073f519ff1e7a9af7ffffd7406ad63]
+reverse link helm-source to helm-type-bookmark--><path d="M353.15,148.7825 C386.55,165.1725 426.47,184.7625 456.85,199.6725 " fill="none" id="helm-source&lt;-helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="349.74,154.9125,334.87,139.8125,355.91,142.3425,349.74,154.9125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[116a0e90e894ac99238d97b5f2f654c6]
+reverse link helm-source to helm-bookmark-override-inheritor--><path d="M228.41,150.9325 C209.92,164.0925 191.01,180.6425 178,199.8125 C155.48,232.9925 147,279.8725 143.84,307.6225 " fill="none" id="helm-source&lt;-helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="224.56,145.0925,245.08,139.8225,232.32,156.7325,224.56,145.0925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ba9011b5edb4004e6afe1680d0692147]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-bookmark-find-files-class'**\n\n
+"helm-source-filtered-bookmarks" <|- - "helm-bookmark-find-files-class"
+"helm-bookmark-override-inheritor" <|- - "helm-bookmark-find-files-class"
+class "helm-source-filtered-bookmarks"
+"helm-source-in-buffer" <|- - "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|- - "helm-source-filtered-bookmarks"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-bookmark"
+"helm-source" <|- - "helm-type-bookmark"
+class "helm-source"
+class "helm-bookmark-override-inheritor"
+"helm-source" <|- - "helm-bookmark-override-inheritor"
+class "helm-source"
+class "helm-bookmark-find-files-class" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filtered-candidate-transformer
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-bookmark-find-files-class"
+ **helm-bookmark-find-files-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-bookmark-override-inheritor.png b/doc/helm-figures/helm-bookmark-override-inheritor.png
new file mode 100644
index 00000000..7d6a6123
--- /dev/null
+++ b/doc/helm-figures/helm-bookmark-override-inheritor.png
Binary files differ
diff --git a/doc/helm-figures/helm-bookmark-override-inheritor.svg b/doc/helm-figures/helm-bookmark-override-inheritor.svg
new file mode 100644
index 00000000..ff5b8ff8
--- /dev/null
+++ b/doc/helm-figures/helm-bookmark-override-inheritor.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="377px" preserveAspectRatio="none" style="width:595px;height:377px;" version="1.1" viewBox="0 0 595 377" width="595px" zoomAndPan="magnify"><defs><filter height="300%" id="f103vatub0c3t5" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="180.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="356" x="122.5" y="37.6611">'helm-bookmark-override-inheritor'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="303.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="303.5" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f103vatub0c3t5)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="82.5" y="91.8125"/><ellipse cx="97.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M100.4688,113.4531 Q99.8906,113.75 99.25,113.8906 Q98.6094,114.0469 97.9063,114.0469 Q95.4063,114.0469 94.0781,112.4063 Q92.7656,110.75 92.7656,107.625 Q92.7656,104.5 94.0781,102.8438 Q95.4063,101.1875 97.9063,101.1875 Q98.6094,101.1875 99.25,101.3438 Q99.9063,101.5 100.4688,101.7969 L100.4688,104.5156 Q99.8438,103.9375 99.25,103.6719 Q98.6563,103.3906 98.0313,103.3906 Q96.6875,103.3906 96,104.4688 Q95.3125,105.5313 95.3125,107.625 Q95.3125,109.7188 96,110.7969 Q96.6875,111.8594 98.0313,111.8594 Q98.6563,111.8594 99.25,111.5938 Q99.8438,111.3125 100.4688,110.7344 L100.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="111.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="83.5" x2="200.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="83.5" x2="200.5" y1="131.8125" y2="131.8125"/><!--MD5=[1a4f21f1efd4e6c0dd550e1e5e387e5d]
+class helm-bookmark-override-inheritor--><rect fill="#FEFECE" filter="url(#f103vatub0c3t5)" height="59.207" id="helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="272" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="35" y="219.9668">helm-bookmark-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="277" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="78.5" y1="246.2148" y2="246.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="78.5" y="249.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="205.5" x2="277" y1="246.2148" y2="246.2148"/><path d="M313,216.8125 L313,225.3125 L278.27,229.3125 L313,233.3125 L313,241.9453 A0,0 0 0 0 313,241.9453 L583,241.9453 A0,0 0 0 0 583,241.9453 L583,226.8125 L573,216.8125 L313,216.8125 A0,0 0 0 0 313,216.8125 " fill="#FBFB77" filter="url(#f103vatub0c3t5)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M573,216.8125 L573,226.8125 L583,226.8125 L573,216.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="249" x="319" y="233.8794">helm-bookmark-override-inheritor</text><!--MD5=[f325aa84e92746ce6f670c419a69be3e]
+class helm-bookmark-find-files-class--><rect fill="#FEFECE" filter="url(#f103vatub0c3t5)" height="48" id="helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.5;" width="249" x="17.5" y="318.8125"/><ellipse cx="32.5" cy="334.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M35.4688,340.4531 Q34.8906,340.75 34.25,340.8906 Q33.6094,341.0469 32.9063,341.0469 Q30.4063,341.0469 29.0781,339.4063 Q27.7656,337.75 27.7656,334.625 Q27.7656,331.5 29.0781,329.8438 Q30.4063,328.1875 32.9063,328.1875 Q33.6094,328.1875 34.25,328.3438 Q34.9063,328.5 35.4688,328.7969 L35.4688,331.5156 Q34.8438,330.9375 34.25,330.6719 Q33.6563,330.3906 33.0313,330.3906 Q31.6875,330.3906 31,331.4688 Q30.3125,332.5313 30.3125,334.625 Q30.3125,336.7188 31,337.7969 Q31.6875,338.8594 33.0313,338.8594 Q33.6563,338.8594 34.25,338.5938 Q34.8438,338.3125 35.4688,337.7344 L35.4688,340.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="46.5" y="338.9668">helm-bookmark-find-files-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="18.5" x2="265.5" y1="350.8125" y2="350.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="18.5" x2="265.5" y1="358.8125" y2="358.8125"/><!--MD5=[116a0e90e894ac99238d97b5f2f654c6]
+reverse link helm-source to helm-bookmark-override-inheritor--><path d="M142,160.1125 C142,173.3925 142,187.6525 142,199.6925 " fill="none" id="helm-source&lt;-helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="135,159.9125,142,139.9125,149,159.9125,135,159.9125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9dfed791578fb3f1a7675a563d26d6dc]
+reverse link helm-bookmark-override-inheritor to helm-bookmark-find-files-class--><path d="M142,279.0925 C142,292.9125 142,307.3025 142,318.8125 " fill="none" id="helm-bookmark-override-inheritor&lt;-helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="135,279.0225,142,259.0225,149,279.0225,135,279.0225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8386eea9400d4516d3d9e967cd5e0ba1]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-bookmark-override-inheritor'**\n\n
+"helm-source" <|- - "helm-bookmark-override-inheritor"
+class "helm-source"
+class "helm-bookmark-override-inheritor" {
+ __ some interesting slots __
+}
+note right of "helm-bookmark-override-inheritor"
+ **helm-bookmark-override-inheritor**
+end note
+"helm-bookmark-override-inheritor" <|- - "helm-bookmark-find-files-class"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-browse-project-override-inheritor.png b/doc/helm-figures/helm-browse-project-override-inheritor.png
new file mode 100644
index 00000000..1d012974
--- /dev/null
+++ b/doc/helm-figures/helm-browse-project-override-inheritor.png
Binary files differ
diff --git a/doc/helm-figures/helm-browse-project-override-inheritor.svg b/doc/helm-figures/helm-browse-project-override-inheritor.svg
new file mode 100644
index 00000000..ab8d2896
--- /dev/null
+++ b/doc/helm-figures/helm-browse-project-override-inheritor.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="485px" preserveAspectRatio="none" style="width:669px;height:485px;" version="1.1" viewBox="0 0 669 485" width="669px" zoomAndPan="magnify"><defs><filter height="300%" id="f1ozxeey48mq8s" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="217.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="408" x="133.5" y="37.6611">'helm-browse-project-override-inheritor'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="340.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="340.5" y="79.5674"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#f1ozxeey48mq8s)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="96" y="199.8125"/><ellipse cx="111" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M113.9688,221.4531 Q113.3906,221.75 112.75,221.8906 Q112.1094,222.0469 111.4063,222.0469 Q108.9063,222.0469 107.5781,220.4063 Q106.2656,218.75 106.2656,215.625 Q106.2656,212.5 107.5781,210.8438 Q108.9063,209.1875 111.4063,209.1875 Q112.1094,209.1875 112.75,209.3438 Q113.4063,209.5 113.9688,209.7969 L113.9688,212.5156 Q113.3438,211.9375 112.75,211.6719 Q112.1563,211.3906 111.5313,211.3906 Q110.1875,211.3906 109.5,212.4688 Q108.8125,213.5313 108.8125,215.625 Q108.8125,217.7188 109.5,218.7969 Q110.1875,219.8594 111.5313,219.8594 Q112.1563,219.8594 112.75,219.5938 Q113.3438,219.3125 113.9688,218.7344 L113.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="125" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="97" x2="225" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="97" x2="225" y1="239.8125" y2="239.8125"/><!--MD5=[473c7582700aad271b06bfe20c99b25e]
+class helm-browse-project-override-inheritor--><rect fill="#FEFECE" filter="url(#f1ozxeey48mq8s)" height="59.207" id="helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="310" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="278" x="35" y="327.9668">helm-browse-project-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="315" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="97.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="97.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="224.5" x2="315" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1ozxeey48mq8s)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="101.5" y="91.8125"/><ellipse cx="116.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M119.4688,113.4531 Q118.8906,113.75 118.25,113.8906 Q117.6094,114.0469 116.9063,114.0469 Q114.4063,114.0469 113.0781,112.4063 Q111.7656,110.75 111.7656,107.625 Q111.7656,104.5 113.0781,102.8438 Q114.4063,101.1875 116.9063,101.1875 Q117.6094,101.1875 118.25,101.3438 Q118.9063,101.5 119.4688,101.7969 L119.4688,104.5156 Q118.8438,103.9375 118.25,103.6719 Q117.6563,103.3906 117.0313,103.3906 Q115.6875,103.3906 115,104.4688 Q114.3125,105.5313 114.3125,107.625 Q114.3125,109.7188 115,110.7969 Q115.6875,111.8594 117.0313,111.8594 Q117.6563,111.8594 118.25,111.5938 Q118.8438,111.3125 119.4688,110.7344 L119.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="130.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="102.5" x2="219.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="102.5" x2="219.5" y1="131.8125" y2="131.8125"/><path d="M351,324.8125 L351,333.3125 L316.09,337.3125 L351,341.3125 L351,349.9453 A0,0 0 0 0 351,349.9453 L657,349.9453 A0,0 0 0 0 657,349.9453 L657,334.8125 L647,324.8125 L351,324.8125 A0,0 0 0 0 351,324.8125 " fill="#FBFB77" filter="url(#f1ozxeey48mq8s)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M647,324.8125 L647,334.8125 L657,334.8125 L647,324.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="285" x="357" y="341.8794">helm-browse-project-override-inheritor</text><!--MD5=[c55ffa29bbb752794a043d0ccea5fc00]
+class helm-browse-project-source--><rect fill="#FEFECE" filter="url(#f1ozxeey48mq8s)" height="48" id="helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.5;" width="232" x="45" y="426.8125"/><ellipse cx="60" cy="442.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M62.9688,448.4531 Q62.3906,448.75 61.75,448.8906 Q61.1094,449.0469 60.4063,449.0469 Q57.9063,449.0469 56.5781,447.4063 Q55.2656,445.75 55.2656,442.625 Q55.2656,439.5 56.5781,437.8438 Q57.9063,436.1875 60.4063,436.1875 Q61.1094,436.1875 61.75,436.3438 Q62.4063,436.5 62.9688,436.7969 L62.9688,439.5156 Q62.3438,438.9375 61.75,438.6719 Q61.1563,438.3906 60.5313,438.3906 Q59.1875,438.3906 58.5,439.4688 Q57.8125,440.5313 57.8125,442.625 Q57.8125,444.7188 58.5,445.7969 Q59.1875,446.8594 60.5313,446.8594 Q61.1563,446.8594 61.75,446.5938 Q62.3438,446.3125 62.9688,445.7344 L62.9688,448.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="74" y="446.9668">helm-browse-project-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="46" x2="276" y1="458.8125" y2="458.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="46" x2="276" y1="466.8125" y2="466.8125"/><!--MD5=[7dce46f1711674df8238e0c6e8679f53]
+reverse link helm-type-file to helm-browse-project-override-inheritor--><path d="M161,268.1125 C161,281.3925 161,295.6525 161,307.6925 " fill="none" id="helm-type-file&lt;-helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="154,267.9125,161,247.9125,168,267.9125,154,267.9125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M161,159.8325 C161,173.3925 161,187.8525 161,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="154,159.8125,161,139.8125,168,159.8125,154,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ae9062e7e7a1f661ae844e732112097a]
+reverse link helm-browse-project-override-inheritor to helm-browse-project-source--><path d="M161,387.0925 C161,400.9125 161,415.3025 161,426.8125 " fill="none" id="helm-browse-project-override-inheritor&lt;-helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="154,387.0225,161,367.0225,168,387.0225,154,387.0225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9280fc60a99543fe01d9bf3d768540ab]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-browse-project-override-inheritor'**\n\n
+"helm-type-file" <|- - "helm-browse-project-override-inheritor"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-browse-project-override-inheritor" {
+ __ some interesting slots __
+}
+note right of "helm-browse-project-override-inheritor"
+ **helm-browse-project-override-inheritor**
+end note
+"helm-browse-project-override-inheritor" <|- - "helm-browse-project-source"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-browse-project-source.png b/doc/helm-figures/helm-browse-project-source.png
new file mode 100644
index 00000000..5182ddef
--- /dev/null
+++ b/doc/helm-figures/helm-browse-project-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-browse-project-source.svg b/doc/helm-figures/helm-browse-project-source.svg
new file mode 100644
index 00000000..a28627c6
--- /dev/null
+++ b/doc/helm-figures/helm-browse-project-source.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="683px" preserveAspectRatio="none" style="width:634px;height:683px;" version="1.1" viewBox="0 0 634 683" width="634px" zoomAndPan="magnify"><defs><filter height="300%" id="ftdivzno2782h" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="200" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="295" x="172.5" y="37.6611">'helm-browse-project-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="323" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="323" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#ftdivzno2782h)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="327.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="347.8125" y2="347.8125"/><!--MD5=[c55ffa29bbb752794a043d0ccea5fc00]
+class helm-browse-project-source--><rect fill="#FEFECE" filter="url(#ftdivzno2782h)" height="256.875" id="helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.5;" width="232" x="123.5" y="415.8125"/><ellipse cx="138.5" cy="431.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M141.4688,437.4531 Q140.8906,437.75 140.25,437.8906 Q139.6094,438.0469 138.9063,438.0469 Q136.4063,438.0469 135.0781,436.4063 Q133.7656,434.75 133.7656,431.625 Q133.7656,428.5 135.0781,426.8438 Q136.4063,425.1875 138.9063,425.1875 Q139.6094,425.1875 140.25,425.3438 Q140.9063,425.5 141.4688,425.7969 L141.4688,428.5156 Q140.8438,427.9375 140.25,427.6719 Q139.6563,427.3906 139.0313,427.3906 Q137.6875,427.3906 137,428.4688 Q136.3125,429.5313 136.3125,431.625 Q136.3125,433.7188 137,434.7969 Q137.6875,435.8594 139.0313,435.8594 Q139.6563,435.8594 140.25,435.5938 Q140.8438,435.3125 141.4688,434.7344 L141.4688,437.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="152.5" y="435.9668">helm-browse-project-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="124.5" x2="354.5" y1="447.8125" y2="447.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="129.5" y="462.0229">Class to define a source in</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="177" x="129.5" y="474.8276">`helm-browse-project' handling</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="21" x="129.5" y="487.6323">non</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="124.5" x2="354.5" y1="494.2266" y2="494.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="124.5" x2="354.5" y1="496.2266" y2="496.2266"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="129.5" y="525.2417">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="129.5" y="538.0464">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="129.5" y="550.8511">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="129.5" y="563.6558">filter-one-by-one</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="129.5" y="576.4604">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="129.5" y="589.2651">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="129.5" y="602.0698">match-part</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="129.5" y="614.8745">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="129.5" y="627.6792">root-dir</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="129.5" y="640.4839">search</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="72" x="129.5" y="653.2886">search-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="129.5" y="666.0933">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="124.5" x2="176" y1="508.6289" y2="508.6289"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="176" y="511.937">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="303" x2="354.5" y1="508.6289" y2="508.6289"/><!--MD5=[473c7582700aad271b06bfe20c99b25e]
+class helm-browse-project-override-inheritor--><rect fill="#FEFECE" filter="url(#ftdivzno2782h)" height="48" id="helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="310" x="226.5" y="307.8125"/><ellipse cx="241.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M244.4688,329.4531 Q243.8906,329.75 243.25,329.8906 Q242.6094,330.0469 241.9063,330.0469 Q239.4063,330.0469 238.0781,328.4063 Q236.7656,326.75 236.7656,323.625 Q236.7656,320.5 238.0781,318.8438 Q239.4063,317.1875 241.9063,317.1875 Q242.6094,317.1875 243.25,317.3438 Q243.9063,317.5 244.4688,317.7969 L244.4688,320.5156 Q243.8438,319.9375 243.25,319.6719 Q242.6563,319.3906 242.0313,319.3906 Q240.6875,319.3906 240,320.4688 Q239.3125,321.5313 239.3125,323.625 Q239.3125,325.7188 240,326.7969 Q240.6875,327.8594 242.0313,327.8594 Q242.6563,327.8594 243.25,327.5938 Q243.8438,327.3125 244.4688,326.7344 L244.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="278" x="255.5" y="327.9668">helm-browse-project-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="227.5" x2="535.5" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="227.5" x2="535.5" y1="347.8125" y2="347.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#ftdivzno2782h)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="180" y="91.8125"/><ellipse cx="195" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M197.9688,113.4531 Q197.3906,113.75 196.75,113.8906 Q196.1094,114.0469 195.4063,114.0469 Q192.9063,114.0469 191.5781,112.4063 Q190.2656,110.75 190.2656,107.625 Q190.2656,104.5 191.5781,102.8438 Q192.9063,101.1875 195.4063,101.1875 Q196.1094,101.1875 196.75,101.3438 Q197.4063,101.5 197.9688,101.7969 L197.9688,104.5156 Q197.3438,103.9375 196.75,103.6719 Q196.1563,103.3906 195.5313,103.3906 Q194.1875,103.3906 193.5,104.4688 Q192.8125,105.5313 192.8125,107.625 Q192.8125,109.7188 193.5,110.7969 Q194.1875,111.8594 195.5313,111.8594 Q196.1563,111.8594 196.75,111.5938 Q197.3438,111.3125 197.9688,110.7344 L197.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="209" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="181" x2="298" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="181" x2="298" y1="131.8125" y2="131.8125"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#ftdivzno2782h)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="274.5" y="199.8125"/><ellipse cx="289.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M292.4688,221.4531 Q291.8906,221.75 291.25,221.8906 Q290.6094,222.0469 289.9063,222.0469 Q287.4063,222.0469 286.0781,220.4063 Q284.7656,218.75 284.7656,215.625 Q284.7656,212.5 286.0781,210.8438 Q287.4063,209.1875 289.9063,209.1875 Q290.6094,209.1875 291.25,209.3438 Q291.9063,209.5 292.4688,209.7969 L292.4688,212.5156 Q291.8438,211.9375 291.25,211.6719 Q290.6563,211.3906 290.0313,211.3906 Q288.6875,211.3906 288,212.4688 Q287.3125,213.5313 287.3125,215.625 Q287.3125,217.7188 288,218.7969 Q288.6875,219.8594 290.0313,219.8594 Q290.6563,219.8594 291.25,219.5938 Q291.8438,219.3125 292.4688,218.7344 L292.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="303.5" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="275.5" x2="403.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="275.5" x2="403.5" y1="239.8125" y2="239.8125"/><path d="M391,508.8125 L391,540.3125 L355.53,544.3125 L391,548.3125 L391,579.3438 A0,0 0 0 0 391,579.3438 L622,579.3438 A0,0 0 0 0 622,579.3438 L622,518.8125 L612,508.8125 L391,508.8125 A0,0 0 0 0 391,508.8125 " fill="#FBFB77" filter="url(#ftdivzno2782h)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M612,508.8125 L612,518.8125 L622,518.8125 L612,508.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="206" x="397" y="525.8794">helm-browse-project-source</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="603" y="525.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="168" x="397" y="541.0122">Class to define a source in</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="199" x="397" y="556.145">`helm-browse-project' handling</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="24" x="397" y="571.2778">non</text><!--MD5=[bab36c04217b3237bb981b2ca6f1bcf5]
+reverse link helm-source-in-buffer to helm-browse-project-source--><path d="M125.42,373.0025 C133.88,385.6225 143.71,400.3025 153.98,415.6425 " fill="none" id="helm-source-in-buffer&lt;-helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="119.44,376.6525,114.13,356.1425,131.07,368.8625,119.44,376.6525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ae9062e7e7a1f661ae844e732112097a]
+reverse link helm-browse-project-override-inheritor to helm-browse-project-source--><path d="M354.39,373.0025 C345.87,385.6225 335.97,400.3025 325.62,415.6425 " fill="none" id="helm-browse-project-override-inheritor&lt;-helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="348.77,368.8125,365.76,356.1425,360.38,376.6425,348.77,368.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M213.12,156.8525 C183.86,201.2525 137.67,271.3725 113.84,307.5325 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="207.29,152.9725,224.14,140.1225,218.98,160.6725,207.29,152.9725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7dce46f1711674df8238e0c6e8679f53]
+reverse link helm-type-file to helm-browse-project-override-inheritor--><path d="M356.16,266.8725 C361.64,280.7025 367.54,295.5725 372.26,307.4925 " fill="none" id="helm-type-file&lt;-helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="349.47,268.9825,348.61,247.8125,362.49,263.8325,349.47,268.9825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M275.12,154.5625 C289.26,169.5525 305.08,186.3225 317.5,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="269.83,159.1625,261.2,139.8125,280.01,149.5525,269.83,159.1625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[28bc3dc24ed232881c88a83b119a839d]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-browse-project-source'**\n\n
+"helm-source-in-buffer" <|- - "helm-browse-project-source"
+"helm-browse-project-override-inheritor" <|- - "helm-browse-project-source"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-browse-project-override-inheritor"
+"helm-type-file" <|- - "helm-browse-project-override-inheritor"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-browse-project-source" {
+ Class to define a source in
+ `helm-browse-project' handling
+ non
+ ==
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filter-one-by-one
+ get-line
+ match
+ match-part
+ migemo
+ root-dir
+ search
+ search-strict
+ volatile
+}
+note right of "helm-browse-project-source"
+ **helm-browse-project-source**:
+ Class to define a source in
+ `helm-browse-project' handling
+ non
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-classes.png b/doc/helm-figures/helm-classes.png
new file mode 100644
index 00000000..973ef01b
--- /dev/null
+++ b/doc/helm-figures/helm-classes.png
Binary files differ
diff --git a/doc/helm-figures/helm-classes.svg b/doc/helm-figures/helm-classes.svg
new file mode 100644
index 00000000..9823ce7d
--- /dev/null
+++ b/doc/helm-figures/helm-classes.svg
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1063px" preserveAspectRatio="none" style="width:3873px;height:1063px;" version="1.1" viewBox="0 0 3873 1063" width="3873px" zoomAndPan="magnify"><defs><filter height="300%" id="fvi1fky2n6wnd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="24" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="321" x="1782" y="22.2773">Classes in library 'Helm'</text><text fill="#000000" font-family="sans-serif" font-size="24" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="0" x="1946.5" y="50.2148"/><text fill="#000000" font-family="sans-serif" font-size="24" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="0" x="1946.5" y="78.1523"/><!--MD5=[8ce10cd09361e4167f55d438848e6970]
+cluster Other classes similar to 'helm-fd-class'--><polygon fill="#FFFFFF" filter="url(#fvi1fky2n6wnd)" points="22,501.8125,333,501.8125,340,524.1094,343,524.1094,343,835.8125,22,835.8125,22,501.8125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="22" x2="340" y1="524.1094" y2="524.1094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="305" x="26" y="516.8076">Other classes similar to 'helm-fd-class'</text><!--MD5=[1d7d7e4c89e9aed475db4e8e47094d84]
+cluster Other classes similar to 'helm-absolute-time-timers-class'--><polygon fill="#FFFFFF" filter="url(#fvi1fky2n6wnd)" points="2468,501.8125,2927,501.8125,2934,524.1094,2937,524.1094,2937,600.8125,2468,600.8125,2468,501.8125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="2468" x2="2934" y1="524.1094" y2="524.1094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="453" x="2472" y="516.8076">Other classes similar to 'helm-absolute-time-timers-class'</text><!--MD5=[64376e55737c45266b98e7ea58f0e433]
+cluster Other classes similar to 'helm-source-session-class'--><polygon fill="#FFFFFF" filter="url(#fvi1fky2n6wnd)" points="2961,501.8125,3378,501.8125,3385,524.1094,3388,524.1094,3388,1051.8125,2961,1051.8125,2961,501.8125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="2961" x2="3385" y1="524.1094" y2="524.1094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="411" x="2965" y="516.8076">Other classes similar to 'helm-source-session-class'</text><!--MD5=[5fb8059fef4bce7eccbf3235476dbc4c]
+cluster Other classes similar to 'helm-files-dired-source'--><polygon fill="#FFFFFF" filter="url(#fvi1fky2n6wnd)" points="1786,501.8125,2176,501.8125,2183,524.1094,2186,524.1094,2186,727.8125,1786,727.8125,1786,501.8125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1786" x2="2183" y1="524.1094" y2="524.1094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="384" x="1790" y="516.8076">Other classes similar to 'helm-files-dired-source'</text><!--MD5=[909ed6805a604b57f4d669b1baed76e3]
+cluster Other classes similar to 'helm-source-in-file'--><polygon fill="#FFFFFF" filter="url(#fvi1fky2n6wnd)" points="1357,501.8125,1711,501.8125,1718,524.1094,1721,524.1094,1721,1051.8125,1357,1051.8125,1357,501.8125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="1357" x2="1718" y1="524.1094" y2="524.1094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="348" x="1361" y="516.8076">Other classes similar to 'helm-source-in-file'</text><!--MD5=[1441e299cd506ca9dbbc97dd119b1228]
+cluster Other classes similar to 'helm-source-dummy'--><polygon fill="#FFFFFF" filter="url(#fvi1fky2n6wnd)" points="3474,355.8125,3841,355.8125,3848,378.1094,3851,378.1094,3851,454.8125,3474,454.8125,3474,355.8125" style="stroke: #000000; stroke-width: 1.5;"/><line style="stroke: #000000; stroke-width: 1.5;" x1="3474" x2="3848" y1="378.1094" y2="378.1094"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="361" x="3478" y="370.8076">Other classes similar to 'helm-source-dummy'</text><!--MD5=[91bb0adfdf7bf369d8d23bbe4e952f89]
+class helm-grep-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-grep-class" style="stroke: #A80036; stroke-width: 1.5;" width="145" x="109.5" y="536.8125"/><ellipse cx="124.5" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M127.4688,558.4531 Q126.8906,558.75 126.25,558.8906 Q125.6094,559.0469 124.9063,559.0469 Q122.4063,559.0469 121.0781,557.4063 Q119.7656,555.75 119.7656,552.625 Q119.7656,549.5 121.0781,547.8438 Q122.4063,546.1875 124.9063,546.1875 Q125.6094,546.1875 126.25,546.3438 Q126.9063,546.5 127.4688,546.7969 L127.4688,549.5156 Q126.8438,548.9375 126.25,548.6719 Q125.6563,548.3906 125.0313,548.3906 Q123.6875,548.3906 123,549.4688 Q122.3125,550.5313 122.3125,552.625 Q122.3125,554.7188 123,555.7969 Q123.6875,556.8594 125.0313,556.8594 Q125.6563,556.8594 126.25,556.5938 Q126.8438,556.3125 127.4688,555.7344 L127.4688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="138.5" y="556.9668">helm-grep-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="110.5" x2="253.5" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="110.5" x2="253.5" y1="576.8125" y2="576.8125"/><!--MD5=[48c627d917d22eb9e4865aed3bf653fb]
+class helm-grep-ag-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-grep-ag-class" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="98" y="663.8125"/><ellipse cx="113" cy="679.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M115.9688,685.4531 Q115.3906,685.75 114.75,685.8906 Q114.1094,686.0469 113.4063,686.0469 Q110.9063,686.0469 109.5781,684.4063 Q108.2656,682.75 108.2656,679.625 Q108.2656,676.5 109.5781,674.8438 Q110.9063,673.1875 113.4063,673.1875 Q114.1094,673.1875 114.75,673.3438 Q115.4063,673.5 115.9688,673.7969 L115.9688,676.5156 Q115.3438,675.9375 114.75,675.6719 Q114.1563,675.3906 113.5313,675.3906 Q112.1875,675.3906 111.5,676.4688 Q110.8125,677.5313 110.8125,679.625 Q110.8125,681.7188 111.5,682.7969 Q112.1875,683.8594 113.5313,683.8594 Q114.1563,683.8594 114.75,683.5938 Q115.3438,683.3125 115.9688,682.7344 L115.9688,685.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="127" y="683.9668">helm-grep-ag-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="99" x2="265" y1="695.8125" y2="695.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="99" x2="265" y1="703.8125" y2="703.8125"/><!--MD5=[d36bc6d3d79507f675f4471be5eaf52f]
+class helm-gid-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-gid-source" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="109" y="771.8125"/><ellipse cx="124" cy="787.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M126.9688,793.4531 Q126.3906,793.75 125.75,793.8906 Q125.1094,794.0469 124.4063,794.0469 Q121.9063,794.0469 120.5781,792.4063 Q119.2656,790.75 119.2656,787.625 Q119.2656,784.5 120.5781,782.8438 Q121.9063,781.1875 124.4063,781.1875 Q125.1094,781.1875 125.75,781.3438 Q126.4063,781.5 126.9688,781.7969 L126.9688,784.5156 Q126.3438,783.9375 125.75,783.6719 Q125.1563,783.3906 124.5313,783.3906 Q123.1875,783.3906 122.5,784.4688 Q121.8125,785.5313 121.8125,787.625 Q121.8125,789.7188 122.5,790.7969 Q123.1875,791.8594 124.5313,791.8594 Q125.1563,791.8594 125.75,791.5938 Q126.3438,791.3125 126.9688,790.7344 L126.9688,793.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="114" x="138" y="791.9668">helm-gid-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="110" x2="254" y1="803.8125" y2="803.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="110" x2="254" y1="811.8125" y2="811.8125"/><!--MD5=[65c9e2a5e033ac2de329b35010304c74]
+class helm-idle-time-timers-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="224" x="2576" y="536.8125"/><ellipse cx="2591" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2593.9688,558.4531 Q2593.3906,558.75 2592.75,558.8906 Q2592.1094,559.0469 2591.4063,559.0469 Q2588.9063,559.0469 2587.5781,557.4063 Q2586.2656,555.75 2586.2656,552.625 Q2586.2656,549.5 2587.5781,547.8438 Q2588.9063,546.1875 2591.4063,546.1875 Q2592.1094,546.1875 2592.75,546.3438 Q2593.4063,546.5 2593.9688,546.7969 L2593.9688,549.5156 Q2593.3438,548.9375 2592.75,548.6719 Q2592.1563,548.3906 2591.5313,548.3906 Q2590.1875,548.3906 2589.5,549.4688 Q2588.8125,550.5313 2588.8125,552.625 Q2588.8125,554.7188 2589.5,555.7969 Q2590.1875,556.8594 2591.5313,556.8594 Q2592.1563,556.8594 2592.75,556.5938 Q2593.3438,556.3125 2593.9688,555.7344 L2593.9688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="192" x="2605" y="556.9668">helm-idle-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2577" x2="2799" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2577" x2="2799" y1="576.8125" y2="576.8125"/><!--MD5=[75687e4369f49c6cba1a6ff12ff0e7fa]
+class helm-epa--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-epa" style="stroke: #A80036; stroke-width: 1.5;" width="98" x="2990" y="536.8125"/><ellipse cx="3005" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3007.9688,558.4531 Q3007.3906,558.75 3006.75,558.8906 Q3006.1094,559.0469 3005.4063,559.0469 Q3002.9063,559.0469 3001.5781,557.4063 Q3000.2656,555.75 3000.2656,552.625 Q3000.2656,549.5 3001.5781,547.8438 Q3002.9063,546.1875 3005.4063,546.1875 Q3006.1094,546.1875 3006.75,546.3438 Q3007.4063,546.5 3007.9688,546.7969 L3007.9688,549.5156 Q3007.3438,548.9375 3006.75,548.6719 Q3006.1563,548.3906 3005.5313,548.3906 Q3004.1875,548.3906 3003.5,549.4688 Q3002.8125,550.5313 3002.8125,552.625 Q3002.8125,554.7188 3003.5,555.7969 Q3004.1875,556.8594 3005.5313,556.8594 Q3006.1563,556.8594 3006.75,556.5938 Q3007.3438,556.3125 3007.9688,555.7344 L3007.9688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="66" x="3019" y="556.9668">helm-epa</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2991" x2="3087" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2991" x2="3087" y1="576.8125" y2="576.8125"/><!--MD5=[3960967beb69c61591e67bd0b8c5ae1c]
+class helm-esh-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-esh-source" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="2995" y="663.8125"/><ellipse cx="3010" cy="679.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3012.9688,685.4531 Q3012.3906,685.75 3011.75,685.8906 Q3011.1094,686.0469 3010.4063,686.0469 Q3007.9063,686.0469 3006.5781,684.4063 Q3005.2656,682.75 3005.2656,679.625 Q3005.2656,676.5 3006.5781,674.8438 Q3007.9063,673.1875 3010.4063,673.1875 Q3011.1094,673.1875 3011.75,673.3438 Q3012.4063,673.5 3012.9688,673.7969 L3012.9688,676.5156 Q3012.3438,675.9375 3011.75,675.6719 Q3011.1563,675.3906 3010.5313,675.3906 Q3009.1875,675.3906 3008.5,676.4688 Q3007.8125,677.5313 3007.8125,679.625 Q3007.8125,681.7188 3008.5,682.7969 Q3009.1875,683.8594 3010.5313,683.8594 Q3011.1563,683.8594 3011.75,683.5938 Q3012.3438,683.3125 3012.9688,682.7344 L3012.9688,685.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="118" x="3024" y="683.9668">helm-esh-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2996" x2="3144" y1="695.8125" y2="695.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2996" x2="3144" y1="703.8125" y2="703.8125"/><!--MD5=[282aa25f9d306cf00c48aa2e4e60e732]
+class helm-eshell-history-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-eshell-history-source" style="stroke: #A80036; stroke-width: 1.5;" width="222" x="2977" y="771.8125"/><ellipse cx="2992" cy="787.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2994.9688,793.4531 Q2994.3906,793.75 2993.75,793.8906 Q2993.1094,794.0469 2992.4063,794.0469 Q2989.9063,794.0469 2988.5781,792.4063 Q2987.2656,790.75 2987.2656,787.625 Q2987.2656,784.5 2988.5781,782.8438 Q2989.9063,781.1875 2992.4063,781.1875 Q2993.1094,781.1875 2993.75,781.3438 Q2994.4063,781.5 2994.9688,781.7969 L2994.9688,784.5156 Q2994.3438,783.9375 2993.75,783.6719 Q2993.1563,783.3906 2992.5313,783.3906 Q2991.1875,783.3906 2990.5,784.4688 Q2989.8125,785.5313 2989.8125,787.625 Q2989.8125,789.7188 2990.5,790.7969 Q2991.1875,791.8594 2992.5313,791.8594 Q2993.1563,791.8594 2993.75,791.5938 Q2994.3438,791.3125 2994.9688,790.7344 L2994.9688,793.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="190" x="3006" y="791.9668">helm-eshell-history-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2978" x2="3198" y1="803.8125" y2="803.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2978" x2="3198" y1="811.8125" y2="811.8125"/><!--MD5=[4700ddfab9e311ad1ae5061cdd5496ba]
+class helm-source-ffiles--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-source-ffiles" style="stroke: #A80036; stroke-width: 1.5;" width="159" x="3008.5" y="879.8125"/><ellipse cx="3023.5" cy="895.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3026.4688,901.4531 Q3025.8906,901.75 3025.25,901.8906 Q3024.6094,902.0469 3023.9063,902.0469 Q3021.4063,902.0469 3020.0781,900.4063 Q3018.7656,898.75 3018.7656,895.625 Q3018.7656,892.5 3020.0781,890.8438 Q3021.4063,889.1875 3023.9063,889.1875 Q3024.6094,889.1875 3025.25,889.3438 Q3025.9063,889.5 3026.4688,889.7969 L3026.4688,892.5156 Q3025.8438,891.9375 3025.25,891.6719 Q3024.6563,891.3906 3024.0313,891.3906 Q3022.6875,891.3906 3022,892.4688 Q3021.3125,893.5313 3021.3125,895.625 Q3021.3125,897.7188 3022,898.7969 Q3022.6875,899.8594 3024.0313,899.8594 Q3024.6563,899.8594 3025.25,899.5938 Q3025.8438,899.3125 3026.4688,898.7344 L3026.4688,901.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="127" x="3037.5" y="899.9668">helm-source-ffiles</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3009.5" x2="3166.5" y1="911.8125" y2="911.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3009.5" x2="3166.5" y1="919.8125" y2="919.8125"/><!--MD5=[a7554553637232b99c06721dc00b929c]
+class helm-imenu-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-imenu-source" style="stroke: #A80036; stroke-width: 1.5;" width="167" x="3004.5" y="987.8125"/><ellipse cx="3019.5" cy="1003.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3022.4688,1009.4531 Q3021.8906,1009.75 3021.25,1009.8906 Q3020.6094,1010.0469 3019.9063,1010.0469 Q3017.4063,1010.0469 3016.0781,1008.4063 Q3014.7656,1006.75 3014.7656,1003.625 Q3014.7656,1000.5 3016.0781,998.8438 Q3017.4063,997.1875 3019.9063,997.1875 Q3020.6094,997.1875 3021.25,997.3438 Q3021.9063,997.5 3022.4688,997.7969 L3022.4688,1000.5156 Q3021.8438,999.9375 3021.25,999.6719 Q3020.6563,999.3906 3020.0313,999.3906 Q3018.6875,999.3906 3018,1000.4688 Q3017.3125,1001.5313 3017.3125,1003.625 Q3017.3125,1005.7188 3018,1006.7969 Q3018.6875,1007.8594 3020.0313,1007.8594 Q3020.6563,1007.8594 3021.25,1007.5938 Q3021.8438,1007.3125 3022.4688,1006.7344 L3022.4688,1009.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="135" x="3033.5" y="1007.9668">helm-imenu-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3005.5" x2="3170.5" y1="1019.8125" y2="1019.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3005.5" x2="3170.5" y1="1027.8125" y2="1027.8125"/><!--MD5=[f9787a7e913788f0fbbca93390d6041a]
+class helm-recentf-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-recentf-source" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="1960.5" y="536.8125"/><ellipse cx="1975.5" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1978.4688,558.4531 Q1977.8906,558.75 1977.25,558.8906 Q1976.6094,559.0469 1975.9063,559.0469 Q1973.4063,559.0469 1972.0781,557.4063 Q1970.7656,555.75 1970.7656,552.625 Q1970.7656,549.5 1972.0781,547.8438 Q1973.4063,546.1875 1975.9063,546.1875 Q1976.6094,546.1875 1977.25,546.3438 Q1977.9063,546.5 1978.4688,546.7969 L1978.4688,549.5156 Q1977.8438,548.9375 1977.25,548.6719 Q1976.6563,548.3906 1976.0313,548.3906 Q1974.6875,548.3906 1974,549.4688 Q1973.3125,550.5313 1973.3125,552.625 Q1973.3125,554.7188 1974,555.7969 Q1974.6875,556.8594 1976.0313,556.8594 Q1976.6563,556.8594 1977.25,556.5938 Q1977.8438,556.3125 1978.4688,555.7344 L1978.4688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="1989.5" y="556.9668">helm-recentf-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1961.5" x2="2134.5" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1961.5" x2="2134.5" y1="576.8125" y2="576.8125"/><!--MD5=[b49d18483e901ae1bf6135ad896f4fad]
+class helm-files-in-current-dir-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.5;" width="253" x="1916.5" y="663.8125"/><ellipse cx="1931.5" cy="679.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1934.4688,685.4531 Q1933.8906,685.75 1933.25,685.8906 Q1932.6094,686.0469 1931.9063,686.0469 Q1929.4063,686.0469 1928.0781,684.4063 Q1926.7656,682.75 1926.7656,679.625 Q1926.7656,676.5 1928.0781,674.8438 Q1929.4063,673.1875 1931.9063,673.1875 Q1932.6094,673.1875 1933.25,673.3438 Q1933.9063,673.5 1934.4688,673.7969 L1934.4688,676.5156 Q1933.8438,675.9375 1933.25,675.6719 Q1932.6563,675.3906 1932.0313,675.3906 Q1930.6875,675.3906 1930,676.4688 Q1929.3125,677.5313 1929.3125,679.625 Q1929.3125,681.7188 1930,682.7969 Q1930.6875,683.8594 1932.0313,683.8594 Q1932.6563,683.8594 1933.25,683.5938 Q1933.8438,683.3125 1934.4688,682.7344 L1934.4688,685.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="221" x="1945.5" y="683.9668">helm-files-in-current-dir-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1917.5" x2="2168.5" y1="695.8125" y2="695.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1917.5" x2="2168.5" y1="703.8125" y2="703.8125"/><!--MD5=[cea65451dee1c19877355cf9a9f1c806]
+class helm-list-el-package-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-list-el-package-source" style="stroke: #A80036; stroke-width: 1.5;" width="229" x="1448.5" y="536.8125"/><ellipse cx="1463.5" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1466.4688,558.4531 Q1465.8906,558.75 1465.25,558.8906 Q1464.6094,559.0469 1463.9063,559.0469 Q1461.4063,559.0469 1460.0781,557.4063 Q1458.7656,555.75 1458.7656,552.625 Q1458.7656,549.5 1460.0781,547.8438 Q1461.4063,546.1875 1463.9063,546.1875 Q1464.6094,546.1875 1465.25,546.3438 Q1465.9063,546.5 1466.4688,546.7969 L1466.4688,549.5156 Q1465.8438,548.9375 1465.25,548.6719 Q1464.6563,548.3906 1464.0313,548.3906 Q1462.6875,548.3906 1462,549.4688 Q1461.3125,550.5313 1461.3125,552.625 Q1461.3125,554.7188 1462,555.7969 Q1462.6875,556.8594 1464.0313,556.8594 Q1464.6563,556.8594 1465.25,556.5938 Q1465.8438,556.3125 1466.4688,555.7344 L1466.4688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="197" x="1477.5" y="556.9668">helm-list-el-package-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1449.5" x2="1676.5" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1449.5" x2="1676.5" y1="576.8125" y2="576.8125"/><!--MD5=[1d6ee517c209485192c7fd1a0dfbbf09]
+class helm-info-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-info-source" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="1487.5" y="663.8125"/><ellipse cx="1502.5" cy="679.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1505.4688,685.4531 Q1504.8906,685.75 1504.25,685.8906 Q1503.6094,686.0469 1502.9063,686.0469 Q1500.4063,686.0469 1499.0781,684.4063 Q1497.7656,682.75 1497.7656,679.625 Q1497.7656,676.5 1499.0781,674.8438 Q1500.4063,673.1875 1502.9063,673.1875 Q1503.6094,673.1875 1504.25,673.3438 Q1504.9063,673.5 1505.4688,673.7969 L1505.4688,676.5156 Q1504.8438,675.9375 1504.25,675.6719 Q1503.6563,675.3906 1503.0313,675.3906 Q1501.6875,675.3906 1501,676.4688 Q1500.3125,677.5313 1500.3125,679.625 Q1500.3125,681.7188 1501,682.7969 Q1501.6875,683.8594 1503.0313,683.8594 Q1503.6563,683.8594 1504.25,683.5938 Q1504.8438,683.3125 1505.4688,682.7344 L1505.4688,685.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="1516.5" y="683.9668">helm-info-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1488.5" x2="1637.5" y1="695.8125" y2="695.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1488.5" x2="1637.5" y1="703.8125" y2="703.8125"/><!--MD5=[56407064ffc9bf78a0cd848588044ef4]
+class helm-locate-subdirs-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-locate-subdirs-source" style="stroke: #A80036; stroke-width: 1.5;" width="226" x="1450" y="771.8125"/><ellipse cx="1465" cy="787.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1467.9688,793.4531 Q1467.3906,793.75 1466.75,793.8906 Q1466.1094,794.0469 1465.4063,794.0469 Q1462.9063,794.0469 1461.5781,792.4063 Q1460.2656,790.75 1460.2656,787.625 Q1460.2656,784.5 1461.5781,782.8438 Q1462.9063,781.1875 1465.4063,781.1875 Q1466.1094,781.1875 1466.75,781.3438 Q1467.4063,781.5 1467.9688,781.7969 L1467.9688,784.5156 Q1467.3438,783.9375 1466.75,783.6719 Q1466.1563,783.3906 1465.5313,783.3906 Q1464.1875,783.3906 1463.5,784.4688 Q1462.8125,785.5313 1462.8125,787.625 Q1462.8125,789.7188 1463.5,790.7969 Q1464.1875,791.8594 1465.5313,791.8594 Q1466.1563,791.8594 1466.75,791.5938 Q1467.3438,791.3125 1467.9688,790.7344 L1467.9688,793.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="194" x="1479" y="791.9668">helm-locate-subdirs-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1451" x2="1675" y1="803.8125" y2="803.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1451" x2="1675" y1="811.8125" y2="811.8125"/><!--MD5=[073c45925f2697dc8d5dd1a44a8a3365]
+class helm-moccur-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-moccur-class" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="1482" y="879.8125"/><ellipse cx="1497" cy="895.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1499.9688,901.4531 Q1499.3906,901.75 1498.75,901.8906 Q1498.1094,902.0469 1497.4063,902.0469 Q1494.9063,902.0469 1493.5781,900.4063 Q1492.2656,898.75 1492.2656,895.625 Q1492.2656,892.5 1493.5781,890.8438 Q1494.9063,889.1875 1497.4063,889.1875 Q1498.1094,889.1875 1498.75,889.3438 Q1499.4063,889.5 1499.9688,889.7969 L1499.9688,892.5156 Q1499.3438,891.9375 1498.75,891.6719 Q1498.1563,891.3906 1497.5313,891.3906 Q1496.1875,891.3906 1495.5,892.4688 Q1494.8125,893.5313 1494.8125,895.625 Q1494.8125,897.7188 1495.5,898.7969 Q1496.1875,899.8594 1497.5313,899.8594 Q1498.1563,899.8594 1498.75,899.5938 Q1499.3438,899.3125 1499.9688,898.7344 L1499.9688,901.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="130" x="1511" y="899.9668">helm-moccur-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1483" x2="1643" y1="911.8125" y2="911.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1483" x2="1643" y1="919.8125" y2="919.8125"/><!--MD5=[6a7a1e548828873723640eef38a6053c]
+class helm-semantic-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-semantic-source" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="1469" y="987.8125"/><ellipse cx="1484" cy="1003.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1486.9688,1009.4531 Q1486.3906,1009.75 1485.75,1009.8906 Q1485.1094,1010.0469 1484.4063,1010.0469 Q1481.9063,1010.0469 1480.5781,1008.4063 Q1479.2656,1006.75 1479.2656,1003.625 Q1479.2656,1000.5 1480.5781,998.8438 Q1481.9063,997.1875 1484.4063,997.1875 Q1485.1094,997.1875 1485.75,997.3438 Q1486.4063,997.5 1486.9688,997.7969 L1486.9688,1000.5156 Q1486.3438,999.9375 1485.75,999.6719 Q1485.1563,999.3906 1484.5313,999.3906 Q1483.1875,999.3906 1482.5,1000.4688 Q1481.8125,1001.5313 1481.8125,1003.625 Q1481.8125,1005.7188 1482.5,1006.7969 Q1483.1875,1007.8594 1484.5313,1007.8594 Q1485.1563,1007.8594 1485.75,1007.5938 Q1486.3438,1007.3125 1486.9688,1006.7344 L1486.9688,1009.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="156" x="1498" y="1007.9668">helm-semantic-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1470" x2="1656" y1="1019.8125" y2="1019.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1470" x2="1656" y1="1027.8125" y2="1027.8125"/><!--MD5=[e7e10cea49efd04a6bea9ed9f44f1841]
+class helm-type-function--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-type-function" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="3492" y="390.8125"/><ellipse cx="3507" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3509.9688,412.4531 Q3509.3906,412.75 3508.75,412.8906 Q3508.1094,413.0469 3507.4063,413.0469 Q3504.9063,413.0469 3503.5781,411.4063 Q3502.2656,409.75 3502.2656,406.625 Q3502.2656,403.5 3503.5781,401.8438 Q3504.9063,400.1875 3507.4063,400.1875 Q3508.1094,400.1875 3508.75,400.3438 Q3509.4063,400.5 3509.9688,400.7969 L3509.9688,403.5156 Q3509.3438,402.9375 3508.75,402.6719 Q3508.1563,402.3906 3507.5313,402.3906 Q3506.1875,402.3906 3505.5,403.4688 Q3504.8125,404.5313 3504.8125,406.625 Q3504.8125,408.7188 3505.5,409.7969 Q3506.1875,410.8594 3507.5313,410.8594 Q3508.1563,410.8594 3508.75,410.5938 Q3509.3438,410.3125 3509.9688,409.7344 L3509.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="134" x="3521" y="410.9668">helm-type-function</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3493" x2="3657" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3493" x2="3657" y1="430.8125" y2="430.8125"/><!--MD5=[78e52b23f8e756ae73535f85f4ae9d39]
+class helm-locate-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-locate-source" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="533" y="536.8125"/><ellipse cx="548" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M550.9688,558.4531 Q550.3906,558.75 549.75,558.8906 Q549.1094,559.0469 548.4063,559.0469 Q545.9063,559.0469 544.5781,557.4063 Q543.2656,555.75 543.2656,552.625 Q543.2656,549.5 544.5781,547.8438 Q545.9063,546.1875 548.4063,546.1875 Q549.1094,546.1875 549.75,546.3438 Q550.4063,546.5 550.9688,546.7969 L550.9688,549.5156 Q550.3438,548.9375 549.75,548.6719 Q549.1563,548.3906 548.5313,548.3906 Q547.1875,548.3906 546.5,549.4688 Q545.8125,550.5313 545.8125,552.625 Q545.8125,554.7188 546.5,555.7969 Q547.1875,556.8594 548.5313,556.8594 Q549.1563,556.8594 549.75,556.5938 Q550.3438,556.3125 550.9688,555.7344 L550.9688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="562" y="556.9668">helm-locate-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="534" x2="700" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="534" x2="700" y1="576.8125" y2="576.8125"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="86.4141" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="297.5" y="225.8125"/><ellipse cx="312.5" cy="241.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M315.4688,247.4531 Q314.8906,247.75 314.25,247.8906 Q313.6094,248.0469 312.9063,248.0469 Q310.4063,248.0469 309.0781,246.4063 Q307.7656,244.75 307.7656,241.625 Q307.7656,238.5 309.0781,236.8438 Q310.4063,235.1875 312.9063,235.1875 Q313.6094,235.1875 314.25,235.3438 Q314.9063,235.5 315.4688,235.7969 L315.4688,238.5156 Q314.8438,237.9375 314.25,237.6719 Q313.6563,237.3906 313.0313,237.3906 Q311.6875,237.3906 311,238.4688 Q310.3125,239.5313 310.3125,241.625 Q310.3125,243.7188 311,244.7969 Q311.6875,245.8594 313.0313,245.8594 Q313.6563,245.8594 314.25,245.5938 Q314.8438,245.3125 315.4688,244.7344 L315.4688,247.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="326.5" y="245.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="298.5" x2="461.5" y1="257.8125" y2="257.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="303.5" y="272.0229">Use this class to define a</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="126" x="303.5" y="284.8276">helm source calling an</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="99" x="303.5" y="297.6323">external process.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="298.5" x2="461.5" y1="304.2266" y2="304.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="298.5" x2="461.5" y1="306.2266" y2="306.2266"/><!--MD5=[2e3d3b2922e1daf59c103872c87a469e]
+class helm-locate-override-inheritor--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="246" x="608" y="390.8125"/><ellipse cx="623" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M625.9688,412.4531 Q625.3906,412.75 624.75,412.8906 Q624.1094,413.0469 623.4063,413.0469 Q620.9063,413.0469 619.5781,411.4063 Q618.2656,409.75 618.2656,406.625 Q618.2656,403.5 619.5781,401.8438 Q620.9063,400.1875 623.4063,400.1875 Q624.1094,400.1875 624.75,400.3438 Q625.4063,400.5 625.9688,400.7969 L625.9688,403.5156 Q625.3438,402.9375 624.75,402.6719 Q624.1563,402.3906 623.5313,402.3906 Q622.1875,402.3906 621.5,403.4688 Q620.8125,404.5313 620.8125,406.625 Q620.8125,408.7188 621.5,409.7969 Q622.1875,410.8594 623.5313,410.8594 Q624.1563,410.8594 624.75,410.5938 Q625.3438,410.3125 625.9688,409.7344 L625.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="214" x="637" y="410.9668">helm-locate-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="609" x2="853" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="609" x2="853" y1="430.8125" y2="430.8125"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="73.6094" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="1093" y="231.8125"/><ellipse cx="1122.4" cy="247.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1125.3688,253.4531 Q1124.7906,253.75 1124.15,253.8906 Q1123.5094,254.0469 1122.8063,254.0469 Q1120.3063,254.0469 1118.9781,252.4063 Q1117.6656,250.75 1117.6656,247.625 Q1117.6656,244.5 1118.9781,242.8438 Q1120.3063,241.1875 1122.8063,241.1875 Q1123.5094,241.1875 1124.15,241.3438 Q1124.8063,241.5 1125.3688,241.7969 L1125.3688,244.5156 Q1124.7438,243.9375 1124.15,243.6719 Q1123.5563,243.3906 1122.9313,243.3906 Q1121.5875,243.3906 1120.9,244.4688 Q1120.2125,245.5313 1120.2125,247.625 Q1120.2125,249.7188 1120.9,250.7969 Q1121.5875,251.8594 1122.9313,251.8594 Q1123.5563,251.8594 1124.15,251.5938 Q1124.7438,251.3125 1125.3688,250.7344 L1125.3688,253.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="1139.6" y="251.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1094" x2="1254" y1="263.8125" y2="263.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="1099" y="278.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="21" x="1099" y="290.8276">file.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1094" x2="1254" y1="297.4219" y2="297.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1094" x2="1254" y1="299.4219" y2="299.4219"/><!--MD5=[11858bbdb8c329cf3bf1e5498cb0b794]
+class helm-file-cache--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-file-cache" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="1234.5" y="390.8125"/><ellipse cx="1249.5" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1252.4688,412.4531 Q1251.8906,412.75 1251.25,412.8906 Q1250.6094,413.0469 1249.9063,413.0469 Q1247.4063,413.0469 1246.0781,411.4063 Q1244.7656,409.75 1244.7656,406.625 Q1244.7656,403.5 1246.0781,401.8438 Q1247.4063,400.1875 1249.9063,400.1875 Q1250.6094,400.1875 1251.25,400.3438 Q1251.9063,400.5 1252.4688,400.7969 L1252.4688,403.5156 Q1251.8438,402.9375 1251.25,402.6719 Q1250.6563,402.3906 1250.0313,402.3906 Q1248.6875,402.3906 1248,403.4688 Q1247.3125,404.5313 1247.3125,406.625 Q1247.3125,408.7188 1248,409.7969 Q1248.6875,410.8594 1250.0313,410.8594 Q1250.6563,410.8594 1251.25,410.5938 Q1251.8438,410.3125 1252.4688,409.7344 L1252.4688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="107" x="1263.5" y="410.9668">helm-file-cache</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1235.5" x2="1372.5" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1235.5" x2="1372.5" y1="430.8125" y2="430.8125"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="86.4141" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="1590.5" y="225.8125"/><ellipse cx="1605.5" cy="241.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1608.4688,247.4531 Q1607.8906,247.75 1607.25,247.8906 Q1606.6094,248.0469 1605.9063,248.0469 Q1603.4063,248.0469 1602.0781,246.4063 Q1600.7656,244.75 1600.7656,241.625 Q1600.7656,238.5 1602.0781,236.8438 Q1603.4063,235.1875 1605.9063,235.1875 Q1606.6094,235.1875 1607.25,235.3438 Q1607.9063,235.5 1608.4688,235.7969 L1608.4688,238.5156 Q1607.8438,237.9375 1607.25,237.6719 Q1606.6563,237.3906 1606.0313,237.3906 Q1604.6875,237.3906 1604,238.4688 Q1603.3125,239.5313 1603.3125,241.625 Q1603.3125,243.7188 1604,244.7969 Q1604.6875,245.8594 1606.0313,245.8594 Q1606.6563,245.8594 1607.25,245.5938 Q1607.8438,245.3125 1608.4688,244.7344 L1608.4688,247.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="1619.5" y="245.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1591.5" x2="1774.5" y1="257.8125" y2="257.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="167" x="1596.5" y="272.0229">Use this source to make helm</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="154" x="1596.5" y="284.8276">sources storing candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="1596.5" y="297.6323">inside a buffer.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1591.5" x2="1774.5" y1="304.2266" y2="304.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1591.5" x2="1774.5" y1="306.2266" y2="306.2266"/><!--MD5=[c55ffa29bbb752794a043d0ccea5fc00]
+class helm-browse-project-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="86.4141" id="helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.5;" width="232" x="1018" y="517.8125"/><ellipse cx="1033" cy="533.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1035.9688,539.4531 Q1035.3906,539.75 1034.75,539.8906 Q1034.1094,540.0469 1033.4063,540.0469 Q1030.9063,540.0469 1029.5781,538.4063 Q1028.2656,536.75 1028.2656,533.625 Q1028.2656,530.5 1029.5781,528.8438 Q1030.9063,527.1875 1033.4063,527.1875 Q1034.1094,527.1875 1034.75,527.3438 Q1035.4063,527.5 1035.9688,527.7969 L1035.9688,530.5156 Q1035.3438,529.9375 1034.75,529.6719 Q1034.1563,529.3906 1033.5313,529.3906 Q1032.1875,529.3906 1031.5,530.4688 Q1030.8125,531.5313 1030.8125,533.625 Q1030.8125,535.7188 1031.5,536.7969 Q1032.1875,537.8594 1033.5313,537.8594 Q1034.1563,537.8594 1034.75,537.5938 Q1035.3438,537.3125 1035.9688,536.7344 L1035.9688,539.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="1047" y="537.9668">helm-browse-project-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1019" x2="1249" y1="549.8125" y2="549.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="149" x="1024" y="564.0229">Class to define a source in</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="177" x="1024" y="576.8276">`helm-browse-project' handling</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="21" x="1024" y="589.6323">non</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1019" x2="1249" y1="596.2266" y2="596.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1019" x2="1249" y1="598.2266" y2="598.2266"/><!--MD5=[473c7582700aad271b06bfe20c99b25e]
+class helm-browse-project-override-inheritor--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="310" x="889" y="390.8125"/><ellipse cx="904" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M906.9688,412.4531 Q906.3906,412.75 905.75,412.8906 Q905.1094,413.0469 904.4063,413.0469 Q901.9063,413.0469 900.5781,411.4063 Q899.2656,409.75 899.2656,406.625 Q899.2656,403.5 900.5781,401.8438 Q901.9063,400.1875 904.4063,400.1875 Q905.1094,400.1875 905.75,400.3438 Q906.4063,400.5 906.9688,400.7969 L906.9688,403.5156 Q906.3438,402.9375 905.75,402.6719 Q905.1563,402.3906 904.5313,402.3906 Q903.1875,402.3906 902.5,403.4688 Q901.8125,404.5313 901.8125,406.625 Q901.8125,408.7188 902.5,409.7969 Q903.1875,410.8594 904.5313,410.8594 Q905.1563,410.8594 905.75,410.5938 Q906.3438,410.3125 906.9688,409.7344 L906.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="278" x="918" y="410.9668">helm-browse-project-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="890" x2="1198" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="890" x2="1198" y1="430.8125" y2="430.8125"/><!--MD5=[bd2ea1af02554a0352e5fd98d33b66ab]
+class helm-fd-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-fd-class" style="stroke: #A80036; stroke-width: 1.5;" width="126" x="119" y="390.8125"/><ellipse cx="134" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M136.9688,412.4531 Q136.3906,412.75 135.75,412.8906 Q135.1094,413.0469 134.4063,413.0469 Q131.9063,413.0469 130.5781,411.4063 Q129.2656,409.75 129.2656,406.625 Q129.2656,403.5 130.5781,401.8438 Q131.9063,400.1875 134.4063,400.1875 Q135.1094,400.1875 135.75,400.3438 Q136.4063,400.5 136.9688,400.7969 L136.9688,403.5156 Q136.3438,402.9375 135.75,402.6719 Q135.1563,402.3906 134.5313,402.3906 Q133.1875,402.3906 132.5,403.4688 Q131.8125,404.5313 131.8125,406.625 Q131.8125,408.7188 132.5,409.7969 Q133.1875,410.8594 134.5313,410.8594 Q135.1563,410.8594 135.75,410.5938 Q136.3438,410.3125 136.9688,409.7344 L136.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="94" x="148" y="410.9668">helm-fd-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="120" x2="244" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="120" x2="244" y1="430.8125" y2="430.8125"/><!--MD5=[b0e60113aba2bebbe59d6cbba30a4a7f]
+class helm-absolute-time-timers-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="261" x="2557.5" y="390.8125"/><ellipse cx="2572.5" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2575.4688,412.4531 Q2574.8906,412.75 2574.25,412.8906 Q2573.6094,413.0469 2572.9063,413.0469 Q2570.4063,413.0469 2569.0781,411.4063 Q2567.7656,409.75 2567.7656,406.625 Q2567.7656,403.5 2569.0781,401.8438 Q2570.4063,400.1875 2572.9063,400.1875 Q2573.6094,400.1875 2574.25,400.3438 Q2574.9063,400.5 2575.4688,400.7969 L2575.4688,403.5156 Q2574.8438,402.9375 2574.25,402.6719 Q2573.6563,402.3906 2573.0313,402.3906 Q2571.6875,402.3906 2571,403.4688 Q2570.3125,404.5313 2570.3125,406.625 Q2570.3125,408.7188 2571,409.7969 Q2571.6875,410.8594 2573.0313,410.8594 Q2573.6563,410.8594 2574.25,410.5938 Q2574.8438,410.3125 2575.4688,409.7344 L2575.4688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="229" x="2586.5" y="410.9668">helm-absolute-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2558.5" x2="2817.5" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2558.5" x2="2817.5" y1="430.8125" y2="430.8125"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="86.4141" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="170" x="2865" y="225.8125"/><ellipse cx="2886.3" cy="241.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2889.2688,247.4531 Q2888.6906,247.75 2888.05,247.8906 Q2887.4094,248.0469 2886.7063,248.0469 Q2884.2063,248.0469 2882.8781,246.4063 Q2881.5656,244.75 2881.5656,241.625 Q2881.5656,238.5 2882.8781,236.8438 Q2884.2063,235.1875 2886.7063,235.1875 Q2887.4094,235.1875 2888.05,235.3438 Q2888.7063,235.5 2889.2688,235.7969 L2889.2688,238.5156 Q2888.6438,237.9375 2888.05,237.6719 Q2887.4563,237.3906 2886.8313,237.3906 Q2885.4875,237.3906 2884.8,238.4688 Q2884.1125,239.5313 2884.1125,241.625 Q2884.1125,243.7188 2884.8,244.7969 Q2885.4875,245.8594 2886.8313,245.8594 Q2887.4563,245.8594 2888.05,245.5938 Q2888.6438,245.3125 2889.2688,244.7344 L2889.2688,247.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="2901.7" y="245.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2866" x2="3034" y1="257.8125" y2="257.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="158" x="2871" y="272.0229">Use this class to make helm</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="124" x="2871" y="284.8276">sources using a list of</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="2871" y="297.6323">candidates.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2866" x2="3034" y1="304.2266" y2="304.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="2866" x2="3034" y1="306.2266" y2="306.2266"/><!--MD5=[d89fbe3a66aa0ad58442d3fbb0e3c04d]
+class helm-type-timers--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="73.6094" id="helm-type-timers" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="2668" y="231.8125"/><ellipse cx="2687.05" cy="247.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2690.0188,253.4531 Q2689.4406,253.75 2688.8,253.8906 Q2688.1594,254.0469 2687.4563,254.0469 Q2684.9563,254.0469 2683.6281,252.4063 Q2682.3156,250.75 2682.3156,247.625 Q2682.3156,244.5 2683.6281,242.8438 Q2684.9563,241.1875 2687.4563,241.1875 Q2688.1594,241.1875 2688.8,241.3438 Q2689.4563,241.5 2690.0188,241.7969 L2690.0188,244.5156 Q2689.3938,243.9375 2688.8,243.6719 Q2688.2063,243.3906 2687.5813,243.3906 Q2686.2375,243.3906 2685.55,244.4688 Q2684.8625,245.5313 2684.8625,247.625 Q2684.8625,249.7188 2685.55,250.7969 Q2686.2375,251.8594 2687.5813,251.8594 Q2688.2063,251.8594 2688.8,251.5938 Q2689.3938,251.3125 2690.0188,250.7344 L2690.0188,253.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="2701.95" y="251.9668">helm-type-timers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2669" x2="2829" y1="263.8125" y2="263.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="2674" y="278.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="41" x="2674" y="290.8276">timers.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2669" x2="2829" y1="297.4219" y2="297.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="2669" x2="2829" y1="299.4219" y2="299.4219"/><!--MD5=[9bb915cdd04b5f6bf4c2c1633cbdfbdc]
+class helm-M-x-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-M-x-class" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="3109" y="390.8125"/><ellipse cx="3124" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3126.9688,412.4531 Q3126.3906,412.75 3125.75,412.8906 Q3125.1094,413.0469 3124.4063,413.0469 Q3121.9063,413.0469 3120.5781,411.4063 Q3119.2656,409.75 3119.2656,406.625 Q3119.2656,403.5 3120.5781,401.8438 Q3121.9063,400.1875 3124.4063,400.1875 Q3125.1094,400.1875 3125.75,400.3438 Q3126.4063,400.5 3126.9688,400.7969 L3126.9688,403.5156 Q3126.3438,402.9375 3125.75,402.6719 Q3125.1563,402.3906 3124.5313,402.3906 Q3123.1875,402.3906 3122.5,403.4688 Q3121.8125,404.5313 3121.8125,406.625 Q3121.8125,408.7188 3122.5,409.7969 Q3123.1875,410.8594 3124.5313,410.8594 Q3125.1563,410.8594 3125.75,410.5938 Q3126.3438,410.3125 3126.9688,409.7344 L3126.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="3138" y="410.9668">helm-M-x-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3110" x2="3244" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3110" x2="3244" y1="430.8125" y2="430.8125"/><!--MD5=[beabceb98eda0d1152a0edf286dc7000]
+class helm-type-command--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="73.6094" id="helm-type-command" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="3070.5" y="231.8125"/><ellipse cx="3085.5" cy="247.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3088.4688,253.4531 Q3087.8906,253.75 3087.25,253.8906 Q3086.6094,254.0469 3085.9063,254.0469 Q3083.4063,254.0469 3082.0781,252.4063 Q3080.7656,250.75 3080.7656,247.625 Q3080.7656,244.5 3082.0781,242.8438 Q3083.4063,241.1875 3085.9063,241.1875 Q3086.6094,241.1875 3087.25,241.3438 Q3087.9063,241.5 3088.4688,241.7969 L3088.4688,244.5156 Q3087.8438,243.9375 3087.25,243.6719 Q3086.6563,243.3906 3086.0313,243.3906 Q3084.6875,243.3906 3084,244.4688 Q3083.3125,245.5313 3083.3125,247.625 Q3083.3125,249.7188 3084,250.7969 Q3084.6875,251.8594 3086.0313,251.8594 Q3086.6563,251.8594 3087.25,251.5938 Q3087.8438,251.3125 3088.4688,250.7344 L3088.4688,253.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="3099.5" y="251.9668">helm-type-command</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3071.5" x2="3244.5" y1="263.8125" y2="263.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="3076.5" y="278.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="60" x="3076.5" y="290.8276">command.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="3071.5" x2="3244.5" y1="297.4219" y2="297.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="3071.5" x2="3244.5" y1="299.4219" y2="299.4219"/><!--MD5=[5e8ec52a80544584992cb03033476cca]
+class helm-source-buffers--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-source-buffers" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="3280.5" y="390.8125"/><ellipse cx="3295.5" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3298.4688,412.4531 Q3297.8906,412.75 3297.25,412.8906 Q3296.6094,413.0469 3295.9063,413.0469 Q3293.4063,413.0469 3292.0781,411.4063 Q3290.7656,409.75 3290.7656,406.625 Q3290.7656,403.5 3292.0781,401.8438 Q3293.4063,400.1875 3295.9063,400.1875 Q3296.6094,400.1875 3297.25,400.3438 Q3297.9063,400.5 3298.4688,400.7969 L3298.4688,403.5156 Q3297.8438,402.9375 3297.25,402.6719 Q3296.6563,402.3906 3296.0313,402.3906 Q3294.6875,402.3906 3294,403.4688 Q3293.3125,404.5313 3293.3125,406.625 Q3293.3125,408.7188 3294,409.7969 Q3294.6875,410.8594 3296.0313,410.8594 Q3296.6563,410.8594 3297.25,410.5938 Q3297.8438,410.3125 3298.4688,409.7344 L3298.4688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="3309.5" y="410.9668">helm-source-buffers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3281.5" x2="3454.5" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3281.5" x2="3454.5" y1="430.8125" y2="430.8125"/><!--MD5=[44eb50c21698d944c3f7c5a7441762ef]
+class helm-type-buffer--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="60.8047" id="helm-type-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="3281" y="238.3125"/><ellipse cx="3305.45" cy="254.3125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3308.4188,259.9531 Q3307.8406,260.25 3307.2,260.3906 Q3306.5594,260.5469 3305.8563,260.5469 Q3303.3563,260.5469 3302.0281,258.9063 Q3300.7156,257.25 3300.7156,254.125 Q3300.7156,251 3302.0281,249.3438 Q3303.3563,247.6875 3305.8563,247.6875 Q3306.5594,247.6875 3307.2,247.8438 Q3307.8563,248 3308.4188,248.2969 L3308.4188,251.0156 Q3307.7938,250.4375 3307.2,250.1719 Q3306.6063,249.8906 3305.9813,249.8906 Q3304.6375,249.8906 3303.95,250.9688 Q3303.2625,252.0313 3303.2625,254.125 Q3303.2625,256.2188 3303.95,257.2969 Q3304.6375,258.3594 3305.9813,258.3594 Q3306.6063,258.3594 3307.2,258.0938 Q3307.7938,257.8125 3308.4188,257.2344 L3308.4188,259.9531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="3321.55" y="258.4668">helm-type-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3282" x2="3452" y1="270.3125" y2="270.3125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="160" x="3287" y="284.5229">A class to define type buffer.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="3282" x2="3452" y1="291.1172" y2="291.1172"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="3282" x2="3452" y1="293.1172" y2="293.1172"/><!--MD5=[f325aa84e92746ce6f670c419a69be3e]
+class helm-bookmark-find-files-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.5;" width="249" x="2202.5" y="536.8125"/><ellipse cx="2217.5" cy="552.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2220.4688,558.4531 Q2219.8906,558.75 2219.25,558.8906 Q2218.6094,559.0469 2217.9063,559.0469 Q2215.4063,559.0469 2214.0781,557.4063 Q2212.7656,555.75 2212.7656,552.625 Q2212.7656,549.5 2214.0781,547.8438 Q2215.4063,546.1875 2217.9063,546.1875 Q2218.6094,546.1875 2219.25,546.3438 Q2219.9063,546.5 2220.4688,546.7969 L2220.4688,549.5156 Q2219.8438,548.9375 2219.25,548.6719 Q2218.6563,548.3906 2218.0313,548.3906 Q2216.6875,548.3906 2216,549.4688 Q2215.3125,550.5313 2215.3125,552.625 Q2215.3125,554.7188 2216,555.7969 Q2216.6875,556.8594 2218.0313,556.8594 Q2218.6563,556.8594 2219.25,556.5938 Q2219.8438,556.3125 2220.4688,555.7344 L2220.4688,558.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="2231.5" y="556.9668">helm-bookmark-find-files-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2203.5" x2="2450.5" y1="568.8125" y2="568.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2203.5" x2="2450.5" y1="576.8125" y2="576.8125"/><!--MD5=[1b5f639ef80bc5f44c8cc4600bf3e2e4]
+class helm-source-filtered-bookmarks--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="259" x="2191.5" y="390.8125"/><ellipse cx="2206.5" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2209.4688,412.4531 Q2208.8906,412.75 2208.25,412.8906 Q2207.6094,413.0469 2206.9063,413.0469 Q2204.4063,413.0469 2203.0781,411.4063 Q2201.7656,409.75 2201.7656,406.625 Q2201.7656,403.5 2203.0781,401.8438 Q2204.4063,400.1875 2206.9063,400.1875 Q2207.6094,400.1875 2208.25,400.3438 Q2208.9063,400.5 2209.4688,400.7969 L2209.4688,403.5156 Q2208.8438,402.9375 2208.25,402.6719 Q2207.6563,402.3906 2207.0313,402.3906 Q2205.6875,402.3906 2205,403.4688 Q2204.3125,404.5313 2204.3125,406.625 Q2204.3125,408.7188 2205,409.7969 Q2205.6875,410.8594 2207.0313,410.8594 Q2207.6563,410.8594 2208.25,410.5938 Q2208.8438,410.3125 2209.4688,409.7344 L2209.4688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="227" x="2220.5" y="410.9668">helm-source-filtered-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2192.5" x2="2449.5" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2192.5" x2="2449.5" y1="430.8125" y2="430.8125"/><!--MD5=[1a4f21f1efd4e6c0dd550e1e5e387e5d]
+class helm-bookmark-override-inheritor--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="272" x="2361" y="244.8125"/><ellipse cx="2376" cy="260.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2378.9688,266.4531 Q2378.3906,266.75 2377.75,266.8906 Q2377.1094,267.0469 2376.4063,267.0469 Q2373.9063,267.0469 2372.5781,265.4063 Q2371.2656,263.75 2371.2656,260.625 Q2371.2656,257.5 2372.5781,255.8438 Q2373.9063,254.1875 2376.4063,254.1875 Q2377.1094,254.1875 2377.75,254.3438 Q2378.4063,254.5 2378.9688,254.7969 L2378.9688,257.5156 Q2378.3438,256.9375 2377.75,256.6719 Q2377.1563,256.3906 2376.5313,256.3906 Q2375.1875,256.3906 2374.5,257.4688 Q2373.8125,258.5313 2373.8125,260.625 Q2373.8125,262.7188 2374.5,263.7969 Q2375.1875,264.8594 2376.5313,264.8594 Q2377.1563,264.8594 2377.75,264.5938 Q2378.3438,264.3125 2378.9688,263.7344 L2378.9688,266.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="2390" y="264.9668">helm-bookmark-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2362" x2="2632" y1="276.8125" y2="276.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2362" x2="2632" y1="284.8125" y2="284.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="73.6094" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="2536" y="91.8125"/><ellipse cx="2575.75" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2578.7188,113.4531 Q2578.1406,113.75 2577.5,113.8906 Q2576.8594,114.0469 2576.1563,114.0469 Q2573.6563,114.0469 2572.3281,112.4063 Q2571.0156,110.75 2571.0156,107.625 Q2571.0156,104.5 2572.3281,102.8438 Q2573.6563,101.1875 2576.1563,101.1875 Q2576.8594,101.1875 2577.5,101.3438 Q2578.1563,101.5 2578.7188,101.7969 L2578.7188,104.5156 Q2578.0938,103.9375 2577.5,103.6719 Q2576.9063,103.3906 2576.2813,103.3906 Q2574.9375,103.3906 2574.25,104.4688 Q2573.5625,105.5313 2573.5625,107.625 Q2573.5625,109.7188 2574.25,110.7969 Q2574.9375,111.8594 2576.2813,111.8594 Q2576.9063,111.8594 2577.5,111.5938 Q2578.0938,111.3125 2578.7188,110.7344 L2578.7188,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="2595.25" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2537" x2="2709" y1="123.8125" y2="123.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="162" x="2542" y="138.0229">Main interface to define helm</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="50" x="2542" y="150.8276">sources.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2537" x2="2709" y1="157.4219" y2="157.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="2537" x2="2709" y1="159.4219" y2="159.4219"/><!--MD5=[257e0c9decabcf296fc5e077c0fe3da7]
+class helm-type-bookmark--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="73.6094" id="helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="2148" y="231.8125"/><ellipse cx="2163" cy="247.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2165.9688,253.4531 Q2165.3906,253.75 2164.75,253.8906 Q2164.1094,254.0469 2163.4063,254.0469 Q2160.9063,254.0469 2159.5781,252.4063 Q2158.2656,250.75 2158.2656,247.625 Q2158.2656,244.5 2159.5781,242.8438 Q2160.9063,241.1875 2163.4063,241.1875 Q2164.1094,241.1875 2164.75,241.3438 Q2165.4063,241.5 2165.9688,241.7969 L2165.9688,244.5156 Q2165.3438,243.9375 2164.75,243.6719 Q2164.1563,243.3906 2163.5313,243.3906 Q2162.1875,243.3906 2161.5,244.4688 Q2160.8125,245.5313 2160.8125,247.625 Q2160.8125,249.7188 2161.5,250.7969 Q2162.1875,251.8594 2163.5313,251.8594 Q2164.1563,251.8594 2164.75,251.5938 Q2165.3438,251.3125 2165.9688,250.7344 L2165.9688,253.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="146" x="2177" y="251.9668">helm-type-bookmark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2149" x2="2325" y1="263.8125" y2="263.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="119" x="2154" y="278.0229">A class to define type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="67" x="2154" y="290.8276">bookmarks.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="2149" x2="2325" y1="297.4219" y2="297.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="2149" x2="2325" y1="299.4219" y2="299.4219"/><!--MD5=[bf73905ec5fe3c8fa1d96a26605c7c43]
+class helm-source-basic-bookmarks--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="244" x="1681" y="390.8125"/><ellipse cx="1696" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1698.9688,412.4531 Q1698.3906,412.75 1697.75,412.8906 Q1697.1094,413.0469 1696.4063,413.0469 Q1693.9063,413.0469 1692.5781,411.4063 Q1691.2656,409.75 1691.2656,406.625 Q1691.2656,403.5 1692.5781,401.8438 Q1693.9063,400.1875 1696.4063,400.1875 Q1697.1094,400.1875 1697.75,400.3438 Q1698.4063,400.5 1698.9688,400.7969 L1698.9688,403.5156 Q1698.3438,402.9375 1697.75,402.6719 Q1697.1563,402.3906 1696.5313,402.3906 Q1695.1875,402.3906 1694.5,403.4688 Q1693.8125,404.5313 1693.8125,406.625 Q1693.8125,408.7188 1694.5,409.7969 Q1695.1875,410.8594 1696.5313,410.8594 Q1697.1563,410.8594 1697.75,410.5938 Q1698.3438,410.3125 1698.9688,409.7344 L1698.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="212" x="1710" y="410.9668">helm-source-basic-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1682" x2="1924" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1682" x2="1924" y1="430.8125" y2="430.8125"/><!--MD5=[acc538c4de58be324c7884953f9df4c3]
+class helm-mac-spotlight-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.5;" width="221" x="351.5" y="390.8125"/><ellipse cx="366.5" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M369.4688,412.4531 Q368.8906,412.75 368.25,412.8906 Q367.6094,413.0469 366.9063,413.0469 Q364.4063,413.0469 363.0781,411.4063 Q361.7656,409.75 361.7656,406.625 Q361.7656,403.5 363.0781,401.8438 Q364.4063,400.1875 366.9063,400.1875 Q367.6094,400.1875 368.25,400.3438 Q368.9063,400.5 369.4688,400.7969 L369.4688,403.5156 Q368.8438,402.9375 368.25,402.6719 Q367.6563,402.3906 367.0313,402.3906 Q365.6875,402.3906 365,403.4688 Q364.3125,404.5313 364.3125,406.625 Q364.3125,408.7188 365,409.7969 Q365.6875,410.8594 367.0313,410.8594 Q367.6563,410.8594 368.25,410.5938 Q368.8438,410.3125 369.4688,409.7344 L369.4688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="189" x="380.5" y="410.9668">helm-mac-spotlight-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="352.5" x2="571.5" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="352.5" x2="571.5" y1="430.8125" y2="430.8125"/><!--MD5=[47156fd6f6930ad01ab8c92c260b1066]
+class helm-source-session-class--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-source-session-class" style="stroke: #A80036; stroke-width: 1.5;" width="220" x="2854" y="390.8125"/><ellipse cx="2869" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2871.9688,412.4531 Q2871.3906,412.75 2870.75,412.8906 Q2870.1094,413.0469 2869.4063,413.0469 Q2866.9063,413.0469 2865.5781,411.4063 Q2864.2656,409.75 2864.2656,406.625 Q2864.2656,403.5 2865.5781,401.8438 Q2866.9063,400.1875 2869.4063,400.1875 Q2870.1094,400.1875 2870.75,400.3438 Q2871.4063,400.5 2871.9688,400.7969 L2871.9688,403.5156 Q2871.3438,402.9375 2870.75,402.6719 Q2870.1563,402.3906 2869.5313,402.3906 Q2868.1875,402.3906 2867.5,403.4688 Q2866.8125,404.5313 2866.8125,406.625 Q2866.8125,408.7188 2867.5,409.7969 Q2868.1875,410.8594 2869.5313,410.8594 Q2870.1563,410.8594 2870.75,410.5938 Q2871.3438,410.3125 2871.9688,409.7344 L2871.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="188" x="2883" y="410.9668">helm-source-session-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2855" x2="3073" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2855" x2="3073" y1="430.8125" y2="430.8125"/><!--MD5=[9c6bffcc58873ff705394a767f912448]
+class helm-files-dired-source--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.5;" width="196" x="1960" y="390.8125"/><ellipse cx="1975" cy="406.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1977.9688,412.4531 Q1977.3906,412.75 1976.75,412.8906 Q1976.1094,413.0469 1975.4063,413.0469 Q1972.9063,413.0469 1971.5781,411.4063 Q1970.2656,409.75 1970.2656,406.625 Q1970.2656,403.5 1971.5781,401.8438 Q1972.9063,400.1875 1975.4063,400.1875 Q1976.1094,400.1875 1976.75,400.3438 Q1977.4063,400.5 1977.9688,400.7969 L1977.9688,403.5156 Q1977.3438,402.9375 1976.75,402.6719 Q1976.1563,402.3906 1975.5313,402.3906 Q1974.1875,402.3906 1973.5,403.4688 Q1972.8125,404.5313 1972.8125,406.625 Q1972.8125,408.7188 1973.5,409.7969 Q1974.1875,410.8594 1975.5313,410.8594 Q1976.1563,410.8594 1976.75,410.5938 Q1977.3438,410.3125 1977.9688,409.7344 L1977.9688,412.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="1989" y="410.9668">helm-files-dired-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1961" x2="2155" y1="422.8125" y2="422.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1961" x2="2155" y1="430.8125" y2="430.8125"/><!--MD5=[2a25ce0fce2e5578c6c8a1e5bf210dba]
+class helm-source-in-file--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="86.4141" id="helm-source-in-file" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="1480" y="371.8125"/><ellipse cx="1495.9" cy="387.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1498.8688,393.4531 Q1498.2906,393.75 1497.65,393.8906 Q1497.0094,394.0469 1496.3063,394.0469 Q1493.8063,394.0469 1492.4781,392.4063 Q1491.1656,390.75 1491.1656,387.625 Q1491.1656,384.5 1492.4781,382.8438 Q1493.8063,381.1875 1496.3063,381.1875 Q1497.0094,381.1875 1497.65,381.3438 Q1498.3063,381.5 1498.8688,381.7969 L1498.8688,384.5156 Q1498.2438,383.9375 1497.65,383.6719 Q1497.0563,383.3906 1496.4313,383.3906 Q1495.0875,383.3906 1494.4,384.4688 Q1493.7125,385.5313 1493.7125,387.625 Q1493.7125,389.7188 1494.4,390.7969 Q1495.0875,391.8594 1496.4313,391.8594 Q1497.0563,391.8594 1497.65,391.5938 Q1498.2438,391.3125 1498.8688,390.7344 L1498.8688,393.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="132" x="1510.1" y="391.9668">helm-source-in-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1481" x2="1645" y1="403.8125" y2="403.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="154" x="1486" y="418.0229">The contents of the FILE will</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="140" x="1486" y="430.8276">be used as candidates in</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="38" x="1486" y="443.6323">buffer.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1481" x2="1645" y1="450.2266" y2="450.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1481" x2="1645" y1="452.2266" y2="452.2266"/><!--MD5=[5adfb603e84a1ac071a064f5c8c4d8a3]
+class helm-source-dummy--><rect fill="#FBFB77" filter="url(#fvi1fky2n6wnd)" height="48" id="helm-source-dummy" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="3488" y="244.8125"/><ellipse cx="3503" cy="260.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M3505.9688,266.4531 Q3505.3906,266.75 3504.75,266.8906 Q3504.1094,267.0469 3503.4063,267.0469 Q3500.9063,267.0469 3499.5781,265.4063 Q3498.2656,263.75 3498.2656,260.625 Q3498.2656,257.5 3499.5781,255.8438 Q3500.9063,254.1875 3503.4063,254.1875 Q3504.1094,254.1875 3504.75,254.3438 Q3505.4063,254.5 3505.9688,254.7969 L3505.9688,257.5156 Q3505.3438,256.9375 3504.75,256.6719 Q3504.1563,256.3906 3503.5313,256.3906 Q3502.1875,256.3906 3501.5,257.4688 Q3500.8125,258.5313 3500.8125,260.625 Q3500.8125,262.7188 3501.5,263.7969 Q3502.1875,264.8594 3503.5313,264.8594 Q3504.1563,264.8594 3504.75,264.5938 Q3505.3438,264.3125 3505.9688,263.7344 L3505.9688,266.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="142" x="3517" y="264.9668">helm-source-dummy</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="3489" x2="3661" y1="276.8125" y2="276.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="3489" x2="3661" y1="284.8125" y2="284.8125"/><!--MD5=[7d486a52fcabfa08acb8358ffa257dfe]
+reverse link helm-source-async to helm-locate-source--><path d="M340.4,330.0825 C337.83,335.9025 335.62,341.8625 334,347.8125 C320.54,397.1225 304.29,421.2225 334,462.8125 C378.83,525.5725 466.88,548.1625 532.92,556.0625 " fill="none" id="helm-source-async&lt;-helm-locate-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="334.26,326.7225,349.6,312.1025,346.72,333.1025,334.26,326.7225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[59ec1b2dfc99414670695ca2c7ef7be5]
+reverse link helm-locate-override-inheritor to helm-locate-source--><path d="M700.06,454.9025 C679.31,481.1025 652.71,514.7125 635.27,536.7325 " fill="none" id="helm-locate-override-inheritor&lt;-helm-locate-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="694.78,450.2825,712.68,438.9525,705.76,458.9725,694.78,450.2825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ea3943677655752665563907a8ed1189]
+reverse link helm-type-file to helm-locate-override-inheritor--><path d="M1073.12,290.9425 C1013.75,304.5925 937.67,324.1925 872,347.8125 C838.56,359.8425 802.27,376.9325 774.88,390.7025 " fill="none" id="helm-type-file&lt;-helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1071.93,284.0325,1092.98,286.4525,1075.01,297.6925,1071.93,284.0325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c3c98643be5ce25a89a8fc176b95e73f]
+reverse link helm-source-in-buffer to helm-file-cache--><path d="M1570.73,291.9425 C1517.8,304.5925 1454.65,322.9725 1401,347.8125 C1376.42,359.1925 1351.2,376.5625 1332.63,390.6325 " fill="none" id="helm-source-in-buffer&lt;-helm-file-cache" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1569.4,285.0625,1590.47,287.3725,1572.56,298.7025,1569.4,285.0625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[20fb0892ad389f5d9224faeaf3fbf8f9]
+reverse link helm-type-file to helm-file-cache--><path d="M1220.34,321.1425 C1241.76,344.8625 1266.12,371.8625 1283.01,390.5625 " fill="none" id="helm-type-file&lt;-helm-file-cache" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1215.01,325.6825,1206.8,306.1525,1225.4,316.3025,1215.01,325.6825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bab36c04217b3237bb981b2ca6f1bcf5]
+reverse link helm-source-in-buffer to helm-browse-project-source--><path d="M1571.06,293.6725 C1533.93,305.5125 1494.15,322.8225 1463,347.8125 C1415.96,385.5425 1437.65,424.6025 1391,462.8125 C1350.51,495.9725 1297.5,518.5325 1250.15,533.4825 " fill="none" id="helm-source-in-buffer&lt;-helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1569.31,286.8925,1590.48,287.8925,1573.31,300.3125,1569.31,286.8925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ae9062e7e7a1f661ae844e732112097a]
+reverse link helm-browse-project-override-inheritor to helm-browse-project-source--><path d="M1069.09,455.9525 C1081.08,475.1425 1095.44,498.1125 1107.6,517.5625 " fill="none" id="helm-browse-project-override-inheritor&lt;-helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1063.12,459.6225,1058.46,438.9525,1075,452.2025,1063.12,459.6225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7dce46f1711674df8238e0c6e8679f53]
+reverse link helm-type-file to helm-browse-project-override-inheritor--><path d="M1127.66,321.1425 C1106.24,344.8625 1081.88,371.8625 1064.99,390.5625 " fill="none" id="helm-type-file&lt;-helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1122.6,316.3025,1141.2,306.1525,1132.99,325.6825,1122.6,316.3025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5fa17a1efdd398e28fa7575bea335940]
+reverse link helm-source-async to helm-fd-class--><path d="M305.07,323.8225 C293.97,331.8525 282.68,340.0425 272,347.8125 C252.57,361.9525 230.85,377.8725 213.61,390.5425 " fill="none" id="helm-source-async&lt;-helm-fd-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="301.34,317.8825,321.65,311.8325,309.54,329.2225,301.34,317.8825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2dab3ea9bdbd523a70d6b4309b981517]
+reverse link helm-source-sync to helm-absolute-time-timers-class--><path d="M2855.77,321.6025 C2812.68,345.2825 2763.81,372.1425 2729.98,390.7425 " fill="none" id="helm-source-sync&lt;-helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2852.62,315.3525,2873.51,311.8525,2859.36,327.6225,2852.62,315.3525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[69966f233324ab1b41ca6bc5703528d7]
+reverse link helm-type-timers to helm-absolute-time-timers-class--><path d="M2725.66,324.9025 C2716.02,347.6725 2705.36,372.8425 2697.85,390.5625 " fill="none" id="helm-type-timers&lt;-helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2719.36,321.8325,2733.61,306.1525,2732.25,327.2925,2719.36,321.8325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9f4d7494bd3425cac0331b57ecd466c2]
+reverse link helm-source-sync to helm-M-x-class--><path d="M3049.55,321.8725 C3064.01,330.1925 3078.55,338.9725 3092,347.8125 C3111.99,360.9425 3133.24,377.4425 3149.49,390.6625 " fill="none" id="helm-source-sync&lt;-helm-M-x-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3046.01,327.9125,3032.03,311.9925,3052.89,315.7225,3046.01,327.9125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4ac71f6dd5cea0c13d2b9c31bc00a812]
+reverse link helm-type-command to helm-M-x-class--><path d="M3165.45,326.2725 C3168.41,348.6825 3171.64,373.1925 3173.93,390.5625 " fill="none" id="helm-type-command&lt;-helm-M-x-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3158.47,326.8925,3162.79,306.1525,3172.35,325.0625,3158.47,326.8925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bd9832b2051106d13c2f652e2dc85e4c]
+reverse link helm-source-sync to helm-source-buffers--><path d="M3054.73,311.5125 C3148.09,335.0825 3180.09,316.0825 3263,347.8125 C3290.35,358.2825 3318.27,376.2525 3338.44,390.8025 " fill="none" id="helm-source-sync&lt;-helm-source-buffers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3052.67,318.2025,3035.21,306.2025,3056.35,304.7025,3052.67,318.2025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[88c02f9cf13fd6689df37b68aefeb8b8]
+reverse link helm-type-buffer to helm-source-buffers--><path d="M3367.35,319.9525 C3367.52,343.9925 3367.71,371.6225 3367.84,390.6425 " fill="none" id="helm-type-buffer&lt;-helm-source-buffers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="3360.35,319.7025,3367.21,299.6525,3374.35,319.6025,3360.35,319.7025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[97418b6d899cd58bad59cfd77e9ec07d]
+reverse link helm-source-filtered-bookmarks to helm-bookmark-find-files-class--><path d="M2322.8,459.0725 C2323.87,484.5925 2325.17,515.8625 2326.04,536.7325 " fill="none" id="helm-source-filtered-bookmarks&lt;-helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2315.8,459.2225,2321.96,438.9525,2329.79,458.6425,2315.8,459.2225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9dfed791578fb3f1a7675a563d26d6dc]
+reverse link helm-bookmark-override-inheritor to helm-bookmark-find-files-class--><path d="M2499.98,312.9825 C2500.78,354.4725 2496.39,417.3925 2468,462.8125 C2447.29,495.9425 2410.65,520.6325 2379.91,536.8125 " fill="none" id="helm-bookmark-override-inheritor&lt;-helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2492.98,313.1825,2499.15,292.9125,2506.97,312.6125,2492.98,313.1825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[116a0e90e894ac99238d97b5f2f654c6]
+reverse link helm-source to helm-bookmark-override-inheritor--><path d="M2576.21,181.0625 C2556.21,202.9625 2533.88,227.4225 2518.04,244.7725 " fill="none" id="helm-source&lt;-helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2571.24,176.1225,2589.89,166.0725,2581.58,185.5625,2571.24,176.1225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[38d3222c9d6413d0e8be51642b02db5a]
+reverse link helm-source-in-buffer to helm-source-filtered-bookmarks--><path d="M1795.65,279.1625 C1896.4,289.5325 2047.29,310.0325 2174,347.8125 C2210.19,358.6025 2249.09,376.3725 2277.78,390.7525 " fill="none" id="helm-source-in-buffer&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1794.77,286.1125,1775.56,277.1625,1796.16,272.1825,1794.77,286.1125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[36bf56344c9fb562b92d13c27d56d2e6]
+reverse link helm-type-bookmark to helm-source-filtered-bookmarks--><path d="M2268.33,323.5325 C2281.83,346.6525 2296.89,372.4825 2307.44,390.5625 " fill="none" id="helm-type-bookmark&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2262.23,326.9525,2258.2,306.1525,2274.32,319.9025,2262.23,326.9525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[560569eff9650cc936c24e2acd6b7c35]
+reverse link helm-source-in-buffer to helm-source-basic-bookmarks--><path d="M1731.08,327.5125 C1749.54,349.6525 1769.55,373.6725 1783.77,390.7425 " fill="none" id="helm-source-in-buffer&lt;-helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1725.46,331.6925,1718.03,311.8525,1736.21,322.7325,1725.46,331.6925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[d74130942a07ed6c44229600fa80fecc]
+reverse link helm-type-bookmark to helm-source-basic-bookmarks--><path d="M2128.26,293.6725 C2072.18,307.2325 2003.11,325.8725 1943,347.8125 C1909.81,359.9225 1873.77,377.0125 1846.58,390.7625 " fill="none" id="helm-type-bookmark&lt;-helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2126.83,286.8225,2147.91,289.0025,2130.07,300.4425,2126.83,286.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4124b062e967a48c84822db18248b7ac]
+reverse link helm-source-async to helm-mac-spotlight-source--><path d="M413.96,329.4525 C426.26,351.0525 439.43,374.1725 448.86,390.7425 " fill="none" id="helm-source-async&lt;-helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="407.75,332.6925,403.94,311.8525,419.92,325.7625,407.75,332.6925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a474bc848475b2374c1d2bb84f271e9b]
+reverse link helm-type-file to helm-mac-spotlight-source--><path d="M1072.93,272.9725 C954.87,279.0125 754.83,296.6025 591,347.8125 C558.22,358.0525 523.73,376.1425 498.66,390.7925 " fill="none" id="helm-type-file&lt;-helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1072.62,265.9825,1092.93,272.0225,1073.29,279.9625,1072.62,265.9825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[52d97fd4d153f2c53b55b3f398cc83b3]
+reverse link helm-source-sync to helm-source-session-class--><path d="M2956.05,332.0525 C2958.08,352.8925 2960.21,374.8325 2961.76,390.7425 " fill="none" id="helm-source-sync&lt;-helm-source-session-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2949.06,332.4325,2954.09,311.8525,2962.99,331.0825,2949.06,332.4325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[808f17c2ae4c57b94c9dcfc78a1aa516]
+reverse link helm-source-sync to helm-files-dired-source--><path d="M2845.32,311.5625 C2551.27,373.0325 2455.67,265.1925 2174,347.8125 C2143.1,356.8825 2111.55,375.5525 2089.18,390.7325 " fill="none" id="helm-source-sync&lt;-helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2843.94,304.6925,2864.98,307.2625,2846.93,318.3725,2843.94,304.6925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[05800070c5d625a950fe67b1123c2019]
+reverse link helm-type-file to helm-files-dired-source--><path d="M1275.34,280.7025 C1355.97,289.3125 1471.69,301.5525 1573,311.8125 C1737.38,328.4625 1785.6,297.5625 1943,347.8125 C1973.04,357.4025 2003.87,375.6325 2026.03,390.5025 " fill="none" id="helm-type-file&lt;-helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1274.51,287.6525,1255.36,278.5625,1276,273.7325,1274.51,287.6525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[687fc8ec140e945488f732dae3c46e2b]
+reverse link helm-source to helm-type-timers--><path d="M2669.75,181.0125 C2685.16,197.8925 2701.96,216.2925 2716.12,231.7925 " fill="none" id="helm-source&lt;-helm-type-timers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2664.42,185.5625,2656.11,166.0725,2674.76,176.1225,2664.42,185.5625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[fde896bcedf28e4926ec99232971bb19]
+reverse link helm-source to helm-type-command--><path d="M2729.91,148.7125 C2817.68,165.4125 2944.7,192.3025 3053,225.8125 C3058.91,227.6425 3064.95,229.6525 3071.01,231.7825 " fill="none" id="helm-source&lt;-helm-type-command" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2728.5,155.5725,2710.14,145.0025,2731.09,141.8125,2728.5,155.5725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[528fc0d38c023ea499a6c44f22caf734]
+reverse link helm-source to helm-type-buffer--><path d="M2730.44,138.1625 C2858.9,149.9225 3079.53,175.7525 3263,225.8125 C3275.3,229.1725 3288.12,233.5625 3300.38,238.2325 " fill="none" id="helm-source&lt;-helm-type-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2729.55,145.1125,2710.25,136.3625,2730.8,131.1725,2729.55,145.1125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b3073f519ff1e7a9af7ffffd7406ad63]
+reverse link helm-source to helm-type-bookmark--><path d="M2516.89,165.1325 C2464.64,182.8325 2400.82,204.8925 2344,225.8125 C2338.19,227.9525 2332.23,230.1825 2326.22,232.4625 " fill="none" id="helm-source&lt;-helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2514.76,158.4725,2535.95,158.7025,2519.24,171.7325,2514.76,158.4725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M2515.67,139.1325 C2325.59,155.7625 1917.33,191.9525 1573,225.8125 C1462.96,236.6325 1335.96,250.1825 1255.35,258.9225 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2515.31,132.1425,2535.84,137.3725,2516.53,146.0925,2515.31,132.1425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[573dc56a4a24525e354df005e91e161f]
+reverse link helm-source-in-buffer to helm-source-in-file--><path d="M1635.03,327.3725 C1622.76,342.1025 1609.79,357.6725 1598.28,371.4725 " fill="none" id="helm-source-in-buffer&lt;-helm-source-in-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1629.79,322.7325,1647.97,311.8525,1640.54,331.6925,1629.79,322.7325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[08cc1f31d63ae7c2a5398bb390fce2ff]
+reverse link helm-source to helm-source-dummy--><path d="M2730.63,132.6925 C2893.3,139.1125 3210.44,159.7625 3471,225.8125 C3489.31,230.4525 3508.67,237.6125 3525.67,244.7025 " fill="none" id="helm-source&lt;-helm-source-dummy" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2729.87,139.6625,2710.15,131.9225,2730.4,125.6725,2729.87,139.6625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M2516.04,145.5125 C2330.24,172.7925 1950.96,228.4725 1775.65,254.2125 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2515.03,138.5925,2535.83,142.6125,2517.06,152.4425,2515.03,138.5925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M2515.6,136.4225 C2128.14,160.2625 806.99,241.5425 462.62,262.7325 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2515.37,129.4225,2535.76,135.1825,2516.23,143.3925,2515.37,129.4225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M2727.05,173.7225 C2771.45,192.4625 2822.62,214.0525 2864.73,231.8225 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="2724.19,180.1125,2708.49,165.8925,2729.64,167.2125,2724.19,180.1125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1ff86e10578f21ae8b7c2c33ec0b4b37]
+link helm-fd-class to helm-grep-class--><!--MD5=[47763c2a1b2b86ef2e5cabf3ea1dc8e3]
+link helm-grep-class to helm-grep-ag-class--><!--MD5=[7400861ebebd0193d7a8c5b8cf12d9cf]
+link helm-grep-ag-class to helm-gid-source--><!--MD5=[4c84627f8180be92cb025c49c1995b74]
+link helm-absolute-time-timers-class to helm-idle-time-timers-class--><!--MD5=[0121459bc19ca9b3817fd88a0f63b53f]
+link helm-source-session-class to helm-epa--><!--MD5=[77493b019ff1f193b2083288c0aa7870]
+link helm-epa to helm-esh-source--><!--MD5=[14248811f7820f097ffd7d933601bee6]
+link helm-esh-source to helm-eshell-history-source--><!--MD5=[87c4543d29bc52c4081d0e780f2252f0]
+link helm-eshell-history-source to helm-source-ffiles--><!--MD5=[e434868026635c23c12b73aa0f47c6ac]
+link helm-source-ffiles to helm-imenu-source--><!--MD5=[f316749d092a8c76e9bb7295c831b5d0]
+link helm-files-dired-source to helm-recentf-source--><!--MD5=[53fcd5504441ea495b261488ef408624]
+link helm-recentf-source to helm-files-in-current-dir-source--><!--MD5=[9014fc316cbcf9d4bdba39d695ece610]
+link helm-source-in-file to helm-list-el-package-source--><!--MD5=[4ac2637ea05c1f7d30e55ffaf8aec6e4]
+link helm-list-el-package-source to helm-info-source--><!--MD5=[0d1a75ebf8e8ae432e94545a2f4c4527]
+link helm-info-source to helm-locate-subdirs-source--><!--MD5=[d05c8f04ac81bce8613bbc82747cf830]
+link helm-locate-subdirs-source to helm-moccur-class--><!--MD5=[9c0181d7378f27cb4d8a6a4a75598756]
+link helm-moccur-class to helm-semantic-source--><!--MD5=[ef1dcaf54a93132f95b48d757e1b16bd]
+link helm-source-dummy to helm-type-function--><!--MD5=[5b5a5040aa2a50170216d4a0d161b718]
+@startuml
+skinparam classFontStyle bold
+skinparam classBackGroundColor #fbfb77
+skinparam TitleFontStyle bold
+skinparam TitleFontSize 24
+title Classes in library 'Helm'\n\n
+class "helm-locate-source" {
+}
+"helm-source-async" <|- - "helm-locate-source"
+"helm-locate-override-inheritor" <|- - "helm-locate-source"
+class "helm-locate-override-inheritor" {
+}
+"helm-type-file" <|- - "helm-locate-override-inheritor"
+class "helm-file-cache" {
+}
+"helm-source-in-buffer" <|- - "helm-file-cache"
+"helm-type-file" <|- - "helm-file-cache"
+class "helm-browse-project-source" {
+ Class to define a source in
+ `helm-browse-project' handling
+ non
+ ==
+}
+"helm-source-in-buffer" <|- - "helm-browse-project-source"
+"helm-browse-project-override-inheritor" <|- - "helm-browse-project-source"
+class "helm-browse-project-override-inheritor" {
+}
+"helm-type-file" <|- - "helm-browse-project-override-inheritor"
+class "helm-fd-class" {
+}
+"helm-source-async" <|- - "helm-fd-class"
+class "helm-absolute-time-timers-class" {
+}
+"helm-source-sync" <|- - "helm-absolute-time-timers-class"
+"helm-type-timers" <|- - "helm-absolute-time-timers-class"
+class "helm-M-x-class" {
+}
+"helm-source-sync" <|- - "helm-M-x-class"
+"helm-type-command" <|- - "helm-M-x-class"
+class "helm-source-buffers" {
+}
+"helm-source-sync" <|- - "helm-source-buffers"
+"helm-type-buffer" <|- - "helm-source-buffers"
+class "helm-bookmark-find-files-class" {
+}
+"helm-source-filtered-bookmarks" <|- - "helm-bookmark-find-files-class"
+"helm-bookmark-override-inheritor" <|- - "helm-bookmark-find-files-class"
+class "helm-bookmark-override-inheritor" {
+}
+"helm-source" <|- - "helm-bookmark-override-inheritor"
+class "helm-source-filtered-bookmarks" {
+}
+"helm-source-in-buffer" <|- - "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|- - "helm-source-filtered-bookmarks"
+class "helm-source-basic-bookmarks" {
+}
+"helm-source-in-buffer" <|- - "helm-source-basic-bookmarks"
+"helm-type-bookmark" <|- - "helm-source-basic-bookmarks"
+class "helm-mac-spotlight-source" {
+}
+"helm-source-async" <|- - "helm-mac-spotlight-source"
+"helm-type-file" <|- - "helm-mac-spotlight-source"
+class "helm-source-session-class" {
+}
+"helm-source-sync" <|- - "helm-source-session-class"
+class "helm-files-dired-source" {
+}
+"helm-source-sync" <|- - "helm-files-dired-source"
+"helm-type-file" <|- - "helm-files-dired-source"
+class "helm-type-timers" {
+ A class to define helm type
+ timers.
+ ==
+}
+"helm-source" <|- - "helm-type-timers"
+class "helm-type-command" {
+ A class to define helm type
+ command.
+ ==
+}
+"helm-source" <|- - "helm-type-command"
+class "helm-type-buffer" {
+ A class to define type buffer.
+ ==
+}
+"helm-source" <|- - "helm-type-buffer"
+class "helm-type-bookmark" {
+ A class to define type
+ bookmarks.
+ ==
+}
+"helm-source" <|- - "helm-type-bookmark"
+class "helm-type-file" {
+ A class to define helm type
+ file.
+ ==
+}
+"helm-source" <|- - "helm-type-file"
+class "helm-source-in-file" {
+ The contents of the FILE will
+ be used as candidates in
+ buffer.
+ ==
+}
+"helm-source-in-buffer" <|- - "helm-source-in-file"
+class "helm-source-dummy" {
+}
+"helm-source" <|- - "helm-source-dummy"
+class "helm-source-in-buffer" {
+ Use this source to make helm
+ sources storing candidates
+ inside a buffer.
+ ==
+}
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source-async" {
+ Use this class to define a
+ helm source calling an
+ external process.
+ ==
+}
+"helm-source" <|- - "helm-source-async"
+class "helm-source-sync" {
+ Use this class to make helm
+ sources using a list of
+ candidates.
+ ==
+}
+"helm-source" <|- - "helm-source-sync"
+class "helm-source" {
+ Main interface to define helm
+ sources.
+ ==
+}
+package "Other classes similar to 'helm-fd-class'" {
+ "helm-fd-class" -down[hidden]-> "helm-grep-class"
+ "helm-grep-class" -down[hidden]-> "helm-grep-ag-class"
+ "helm-grep-ag-class" -down[hidden]-> "helm-gid-source"
+}
+package "Other classes similar to 'helm-absolute-time-timers-class'" {
+ "helm-absolute-time-timers-class" -down[hidden]-> "helm-idle-time-timers-class"
+}
+package "Other classes similar to 'helm-source-session-class'" {
+ "helm-source-session-class" -down[hidden]-> "helm-epa"
+ "helm-epa" -down[hidden]-> "helm-esh-source"
+ "helm-esh-source" -down[hidden]-> "helm-eshell-history-source"
+ "helm-eshell-history-source" -down[hidden]-> "helm-source-ffiles"
+ "helm-source-ffiles" -down[hidden]-> "helm-imenu-source"
+}
+package "Other classes similar to 'helm-files-dired-source'" {
+ "helm-files-dired-source" -down[hidden]-> "helm-recentf-source"
+ "helm-recentf-source" -down[hidden]-> "helm-files-in-current-dir-source"
+}
+package "Other classes similar to 'helm-source-in-file'" {
+ "helm-source-in-file" -down[hidden]-> "helm-list-el-package-source"
+ "helm-list-el-package-source" -down[hidden]-> "helm-info-source"
+ "helm-info-source" -down[hidden]-> "helm-locate-subdirs-source"
+ "helm-locate-subdirs-source" -down[hidden]-> "helm-moccur-class"
+ "helm-moccur-class" -down[hidden]-> "helm-semantic-source"
+}
+package "Other classes similar to 'helm-source-dummy'" {
+ "helm-source-dummy" -down[hidden]-> "helm-type-function"
+}
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-epa.png b/doc/helm-figures/helm-epa.png
new file mode 100644
index 00000000..fec09398
--- /dev/null
+++ b/doc/helm-figures/helm-epa.png
Binary files differ
diff --git a/doc/helm-figures/helm-epa.svg b/doc/helm-figures/helm-epa.svg
new file mode 100644
index 00000000..2015c2b8
--- /dev/null
+++ b/doc/helm-figures/helm-epa.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="460px" preserveAspectRatio="none" style="width:417px;height:460px;" version="1.1" viewBox="0 0 417 460" width="417px" zoomAndPan="magnify"><defs><filter height="300%" id="fo7o9xfh1dsy8" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="91.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="105" x="159" y="37.6611">'helm-epa'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="214.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="214.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#fo7o9xfh1dsy8)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="12" y="199.8125"/><ellipse cx="27" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M29.9688,221.4531 Q29.3906,221.75 28.75,221.8906 Q28.1094,222.0469 27.4063,222.0469 Q24.9063,222.0469 23.5781,220.4063 Q22.2656,218.75 22.2656,215.625 Q22.2656,212.5 23.5781,210.8438 Q24.9063,209.1875 27.4063,209.1875 Q28.1094,209.1875 28.75,209.3438 Q29.4063,209.5 29.9688,209.7969 L29.9688,212.5156 Q29.3438,211.9375 28.75,211.6719 Q28.1563,211.3906 27.5313,211.3906 Q26.1875,211.3906 25.5,212.4688 Q24.8125,213.5313 24.8125,215.625 Q24.8125,217.7188 25.5,218.7969 Q26.1875,219.8594 27.5313,219.8594 Q28.1563,219.8594 28.75,219.5938 Q29.3438,219.3125 29.9688,218.7344 L29.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="41" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="13" x2="167" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="13" x2="167" y1="239.8125" y2="239.8125"/><!--MD5=[75687e4369f49c6cba1a6ff12ff0e7fa]
+class helm-epa--><rect fill="#FEFECE" filter="url(#fo7o9xfh1dsy8)" height="141.6328" id="helm-epa" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="6" y="307.8125"/><ellipse cx="52.75" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M55.7188,329.4531 Q55.1406,329.75 54.5,329.8906 Q53.8594,330.0469 53.1563,330.0469 Q50.6563,330.0469 49.3281,328.4063 Q48.0156,326.75 48.0156,323.625 Q48.0156,320.5 49.3281,318.8438 Q50.6563,317.1875 53.1563,317.1875 Q53.8594,317.1875 54.5,317.3438 Q55.1563,317.5 55.7188,317.7969 L55.7188,320.5156 Q55.0938,319.9375 54.5,319.6719 Q53.9063,319.3906 53.2813,319.3906 Q51.9375,319.3906 51.25,320.4688 Q50.5625,321.5313 50.5625,323.625 Q50.5625,325.7188 51.25,326.7969 Q51.9375,327.8594 53.2813,327.8594 Q53.9063,327.8594 54.5,327.5938 Q55.0938,327.3125 55.7188,326.7344 L55.7188,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="66" x="73.25" y="327.9668">helm-epa</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="173" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="156" x="12" y="354.0229">Allow building helm sources</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="77" x="12" y="366.8276">for GPG keys.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="173" y1="373.4219" y2="373.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="173" y1="375.4219" y2="375.4219"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="12" y="404.437">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="417.2417">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="430.0464">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="56" x="12" y="442.8511">mode-line</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="26.5" y1="387.8242" y2="387.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="26.5" y="391.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="153.5" x2="173" y1="387.8242" y2="387.8242"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fo7o9xfh1dsy8)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="30.5" y="91.8125"/><ellipse cx="45.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M48.4688,113.4531 Q47.8906,113.75 47.25,113.8906 Q46.6094,114.0469 45.9063,114.0469 Q43.4063,114.0469 42.0781,112.4063 Q40.7656,110.75 40.7656,107.625 Q40.7656,104.5 42.0781,102.8438 Q43.4063,101.1875 45.9063,101.1875 Q46.6094,101.1875 47.25,101.3438 Q47.9063,101.5 48.4688,101.7969 L48.4688,104.5156 Q47.8438,103.9375 47.25,103.6719 Q46.6563,103.3906 46.0313,103.3906 Q44.6875,103.3906 44,104.4688 Q43.3125,105.5313 43.3125,107.625 Q43.3125,109.7188 44,110.7969 Q44.6875,111.8594 46.0313,111.8594 Q46.6563,111.8594 47.25,111.5938 Q47.8438,111.3125 48.4688,110.7344 L48.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="59.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="31.5" x2="148.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="31.5" x2="148.5" y1="131.8125" y2="131.8125"/><path d="M209,351.3125 L209,374.8125 L174.34,378.8125 L209,382.8125 L209,406.7109 A0,0 0 0 0 209,406.7109 L405,406.7109 A0,0 0 0 0 405,406.7109 L405,361.3125 L395,351.3125 L209,351.3125 A0,0 0 0 0 209,351.3125 " fill="#FBFB77" filter="url(#fo7o9xfh1dsy8)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M395,351.3125 L395,361.3125 L405,361.3125 L395,351.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="69" x="215" y="368.3794">helm-epa</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="284" y="368.3794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="175" x="215" y="383.5122">Allow building helm sources</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="215" y="398.645">for GPG keys.</text><!--MD5=[7e5f38bd9ae0e1bb94a273709f715bc1]
+reverse link helm-source-sync to helm-epa--><path d="M90,268.2425 C90,280.5125 90,294.1725 90,307.5825 " fill="none" id="helm-source-sync&lt;-helm-epa" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="83,268.0525,90,248.0525,97,268.0525,83,268.0525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M90,159.8325 C90,173.3925 90,187.8525 90,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="83,159.8125,90,139.8125,97,159.8125,83,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7068a30a50db157eca643f07df57529f]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-epa'**\n\n
+"helm-source-sync" <|- - "helm-epa"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-epa" {
+ Allow building helm sources
+ for GPG keys.
+ ==
+ __ some interesting slots __
+ init
+ candidates
+ keymap
+ mode-line
+}
+note right of "helm-epa"
+ **helm-epa**:
+ Allow building helm sources
+ for GPG keys.
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-esh-source.png b/doc/helm-figures/helm-esh-source.png
new file mode 100644
index 00000000..8266ae74
--- /dev/null
+++ b/doc/helm-figures/helm-esh-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-esh-source.svg b/doc/helm-figures/helm-esh-source.svg
new file mode 100644
index 00000000..68e5e6a2
--- /dev/null
+++ b/doc/helm-figures/helm-esh-source.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="486px" preserveAspectRatio="none" style="width:435px;height:486px;" version="1.1" viewBox="0 0 435 486" width="435px" zoomAndPan="magnify"><defs><filter height="300%" id="f19d4rxgbabkl7" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="100.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="179" x="131" y="37.6611">'helm-esh-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="223.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="223.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f19d4rxgbabkl7)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="20" y="199.8125"/><ellipse cx="35" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M37.9688,221.4531 Q37.3906,221.75 36.75,221.8906 Q36.1094,222.0469 35.4063,222.0469 Q32.9063,222.0469 31.5781,220.4063 Q30.2656,218.75 30.2656,215.625 Q30.2656,212.5 31.5781,210.8438 Q32.9063,209.1875 35.4063,209.1875 Q36.1094,209.1875 36.75,209.3438 Q37.4063,209.5 37.9688,209.7969 L37.9688,212.5156 Q37.3438,211.9375 36.75,211.6719 Q36.1563,211.3906 35.5313,211.3906 Q34.1875,211.3906 33.5,212.4688 Q32.8125,213.5313 32.8125,215.625 Q32.8125,217.7188 33.5,218.7969 Q34.1875,219.8594 35.5313,219.8594 Q36.1563,219.8594 36.75,219.5938 Q37.3438,219.3125 37.9688,218.7344 L37.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="49" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="21" x2="175" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="21" x2="175" y1="239.8125" y2="239.8125"/><!--MD5=[3960967beb69c61591e67bd0b8c5ae1c]
+class helm-esh-source--><rect fill="#FEFECE" filter="url(#f19d4rxgbabkl7)" height="167.2422" id="helm-esh-source" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="307.8125"/><ellipse cx="36.3" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M39.2688,329.4531 Q38.6906,329.75 38.05,329.8906 Q37.4094,330.0469 36.7063,330.0469 Q34.2063,330.0469 32.8781,328.4063 Q31.5656,326.75 31.5656,323.625 Q31.5656,320.5 32.8781,318.8438 Q34.2063,317.1875 36.7063,317.1875 Q37.4094,317.1875 38.05,317.3438 Q38.7063,317.5 39.2688,317.7969 L39.2688,320.5156 Q38.6438,319.9375 38.05,319.6719 Q37.4563,319.3906 36.8313,319.3906 Q35.4875,319.3906 34.8,320.4688 Q34.1125,321.5313 34.1125,323.625 Q34.1125,325.7188 34.8,326.7969 Q35.4875,327.8594 36.8313,327.8594 Q37.4563,327.8594 38.05,327.5938 Q38.6438,327.3125 39.2688,326.7344 L39.2688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="118" x="53.7" y="327.9668">helm-esh-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="156" x="12" y="354.0229">Helm class to define source</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="122" x="12" y="366.8276">for Eshell completion.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="189" y1="373.4219" y2="373.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="189" y1="375.4219" y2="375.4219"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="12" y="404.437">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="417.2417">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="430.0464">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="442.8511">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="455.6558">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="12" y="468.4604">persistent-action</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="387.8242" y2="387.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="391.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="387.8242" y2="387.8242"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f19d4rxgbabkl7)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><path d="M225,363.8125 L225,387.3125 L190.25,391.3125 L225,395.3125 L225,419.2109 A0,0 0 0 0 225,419.2109 L423,419.2109 A0,0 0 0 0 423,419.2109 L423,373.8125 L413,363.8125 L225,363.8125 A0,0 0 0 0 225,363.8125 " fill="#FBFB77" filter="url(#f19d4rxgbabkl7)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M413,363.8125 L413,373.8125 L423,373.8125 L413,363.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="231" y="380.8794">helm-esh-source</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="352" y="380.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="177" x="231" y="396.0122">Helm class to define source</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="137" x="231" y="411.145">for Eshell completion.</text><!--MD5=[3538d698cbe22ffcb5425ab9a9243391]
+reverse link helm-source-sync to helm-esh-source--><path d="M98,267.9125 C98,280.1625 98,293.9325 98,307.7025 " fill="none" id="helm-source-sync&lt;-helm-esh-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,267.8225,98,247.8225,105,267.8225,91,267.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M98,159.8325 C98,173.3925 98,187.8525 98,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,159.8125,98,139.8125,105,159.8125,91,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5a7135172eed18ac4e7326421ffc73f8]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-esh-source'**\n\n
+"helm-source-sync" <|- - "helm-esh-source"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-esh-source" {
+ Helm class to define source
+ for Eshell completion.
+ ==
+ __ some interesting slots __
+ init
+ action
+ candidates
+ filtered-candidate-transformer
+ nohighlight
+ persistent-action
+}
+note right of "helm-esh-source"
+ **helm-esh-source**:
+ Helm class to define source
+ for Eshell completion.
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-eshell-history-source.png b/doc/helm-figures/helm-eshell-history-source.png
new file mode 100644
index 00000000..43a58cd5
--- /dev/null
+++ b/doc/helm-figures/helm-eshell-history-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-eshell-history-source.svg b/doc/helm-figures/helm-eshell-history-source.svg
new file mode 100644
index 00000000..fb092b66
--- /dev/null
+++ b/doc/helm-figures/helm-eshell-history-source.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="498px" preserveAspectRatio="none" style="width:493px;height:498px;" version="1.1" viewBox="0 0 493 498" width="493px" zoomAndPan="magnify"><defs><filter height="300%" id="f1825r3tjfbznu" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="129.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="282" x="108.5" y="37.6611">'helm-eshell-history-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="252.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="252.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f1825r3tjfbznu)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="39" y="199.8125"/><ellipse cx="54" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.9688,221.4531 Q56.3906,221.75 55.75,221.8906 Q55.1094,222.0469 54.4063,222.0469 Q51.9063,222.0469 50.5781,220.4063 Q49.2656,218.75 49.2656,215.625 Q49.2656,212.5 50.5781,210.8438 Q51.9063,209.1875 54.4063,209.1875 Q55.1094,209.1875 55.75,209.3438 Q56.4063,209.5 56.9688,209.7969 L56.9688,212.5156 Q56.3438,211.9375 55.75,211.6719 Q55.1563,211.3906 54.5313,211.3906 Q53.1875,211.3906 52.5,212.4688 Q51.8125,213.5313 51.8125,215.625 Q51.8125,217.7188 52.5,218.7969 Q53.1875,219.8594 54.5313,219.8594 Q55.1563,219.8594 55.75,219.5938 Q56.3438,219.3125 56.9688,218.7344 L56.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="68" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="194" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="194" y1="239.8125" y2="239.8125"/><!--MD5=[282aa25f9d306cf00c48aa2e4e60e732]
+class helm-eshell-history-source--><rect fill="#FEFECE" filter="url(#f1825r3tjfbznu)" height="180.0469" id="helm-eshell-history-source" style="stroke: #A80036; stroke-width: 1.5;" width="222" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="190" x="35" y="327.9668">helm-eshell-history-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="227" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="156" x="12" y="354.0229">Helm class to define source</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="99" x="12" y="366.8276">for Eshell history.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="227" y1="373.4219" y2="373.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="227" y1="375.4219" y2="375.4219"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="12" y="404.437">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="417.2417">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="430.0464">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="442.8511">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="455.6558">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="48" x="12" y="468.4604">multiline</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="12" y="481.2651">nomark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="53.5" y1="387.8242" y2="387.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="53.5" y="391.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="180.5" x2="227" y1="387.8242" y2="387.8242"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1825r3tjfbznu)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="57.5" y="91.8125"/><ellipse cx="72.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M75.4688,113.4531 Q74.8906,113.75 74.25,113.8906 Q73.6094,114.0469 72.9063,114.0469 Q70.4063,114.0469 69.0781,112.4063 Q67.7656,110.75 67.7656,107.625 Q67.7656,104.5 69.0781,102.8438 Q70.4063,101.1875 72.9063,101.1875 Q73.6094,101.1875 74.25,101.3438 Q74.9063,101.5 75.4688,101.7969 L75.4688,104.5156 Q74.8438,103.9375 74.25,103.6719 Q73.6563,103.3906 73.0313,103.3906 Q71.6875,103.3906 71,104.4688 Q70.3125,105.5313 70.3125,107.625 Q70.3125,109.7188 71,110.7969 Q71.6875,111.8594 73.0313,111.8594 Q73.6563,111.8594 74.25,111.5938 Q74.8438,111.3125 75.4688,110.7344 L75.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="86.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="58.5" x2="175.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="58.5" x2="175.5" y1="131.8125" y2="131.8125"/><path d="M263,370.3125 L263,393.8125 L228.06,397.8125 L263,401.8125 L263,425.7109 A0,0 0 0 0 263,425.7109 L481,425.7109 A0,0 0 0 0 481,425.7109 L481,380.3125 L471,370.3125 L263,370.3125 A0,0 0 0 0 263,370.3125 " fill="#FBFB77" filter="url(#f1825r3tjfbznu)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M471,370.3125 L471,380.3125 L481,380.3125 L471,370.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="193" x="269" y="387.3794">helm-eshell-history-source</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="462" y="387.3794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="177" x="269" y="402.5122">Helm class to define source</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="269" y="417.645">for Eshell history.</text><!--MD5=[fef6fcdc8cf3b550f0b2dccd98f262c8]
+reverse link helm-source-sync to helm-eshell-history-source--><path d="M117,268.3825 C117,280.4225 117,293.9525 117,307.5825 " fill="none" id="helm-source-sync&lt;-helm-eshell-history-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="110,268.0125,117,248.0125,124,268.0125,110,268.0125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M117,159.8325 C117,173.3925 117,187.8525 117,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="110,159.8125,117,139.8125,124,159.8125,110,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ca59d3baf3ee3f8dafb32b8fee0e66d1]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-eshell-history-source'**\n\n
+"helm-source-sync" <|- - "helm-eshell-history-source"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-eshell-history-source" {
+ Helm class to define source
+ for Eshell history.
+ ==
+ __ some interesting slots __
+ init
+ action
+ candidate-number-limit
+ candidates
+ keymap
+ multiline
+ nomark
+}
+note right of "helm-eshell-history-source"
+ **helm-eshell-history-source**:
+ Helm class to define source
+ for Eshell history.
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-fd-class.png b/doc/helm-figures/helm-fd-class.png
new file mode 100644
index 00000000..0e896bdd
--- /dev/null
+++ b/doc/helm-figures/helm-fd-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-fd-class.svg b/doc/helm-figures/helm-fd-class.svg
new file mode 100644
index 00000000..788a913b
--- /dev/null
+++ b/doc/helm-figures/helm-fd-class.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="478px" preserveAspectRatio="none" style="width:357px;height:478px;" version="1.1" viewBox="0 0 357 478" width="357px" zoomAndPan="magnify"><defs><filter height="300%" id="f18usoniyle2x" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="61.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="147" x="108" y="37.6611">'helm-fd-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="184.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="184.5" y="79.5674"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#f18usoniyle2x)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="15.5" y="199.8125"/><ellipse cx="30.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M33.4688,221.4531 Q32.8906,221.75 32.25,221.8906 Q31.6094,222.0469 30.9063,222.0469 Q28.4063,222.0469 27.0781,220.4063 Q25.7656,218.75 25.7656,215.625 Q25.7656,212.5 27.0781,210.8438 Q28.4063,209.1875 30.9063,209.1875 Q31.6094,209.1875 32.25,209.3438 Q32.9063,209.5 33.4688,209.7969 L33.4688,212.5156 Q32.8438,211.9375 32.25,211.6719 Q31.6563,211.3906 31.0313,211.3906 Q29.6875,211.3906 29,212.4688 Q28.3125,213.5313 28.3125,215.625 Q28.3125,217.7188 29,218.7969 Q29.6875,219.8594 31.0313,219.8594 Q31.6563,219.8594 32.25,219.5938 Q32.8438,219.3125 33.4688,218.7344 L33.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="44.5" y="219.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="239.8125" y2="239.8125"/><!--MD5=[bd2ea1af02554a0352e5fd98d33b66ab]
+class helm-fd-class--><rect fill="#FEFECE" filter="url(#f18usoniyle2x)" height="159.2422" id="helm-fd-class" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="307.8125"/><ellipse cx="47.1" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M50.0688,329.4531 Q49.4906,329.75 48.85,329.8906 Q48.2094,330.0469 47.5063,330.0469 Q45.0063,330.0469 43.6781,328.4063 Q42.3656,326.75 42.3656,323.625 Q42.3656,320.5 43.6781,318.8438 Q45.0063,317.1875 47.5063,317.1875 Q48.2094,317.1875 48.85,317.3438 Q49.5063,317.5 50.0688,317.7969 L50.0688,320.5156 Q49.4438,319.9375 48.85,319.6719 Q48.2563,319.3906 47.6313,319.3906 Q46.2875,319.3906 45.6,320.4688 Q44.9125,321.5313 44.9125,323.625 Q44.9125,325.7188 45.6,326.7969 Q46.2875,327.8594 47.6313,327.8594 Q48.2563,327.8594 48.85,327.5938 Q49.4438,327.3125 50.0688,326.7344 L50.0688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="94" x="66.9" y="327.9668">helm-fd-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="370.8276">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="383.6323">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="396.437">candidates-process</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="409.2417">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="422.0464">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="434.8511">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="447.6558">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="12" y="460.4604">requires-pattern</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f18usoniyle2x)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><path d="M225,374.8125 L225,383.3125 L190.04,387.3125 L225,391.3125 L225,399.9453 A0,0 0 0 0 225,399.9453 L345,399.9453 A0,0 0 0 0 345,399.9453 L345,384.8125 L335,374.8125 L225,374.8125 A0,0 0 0 0 225,374.8125 " fill="#FBFB77" filter="url(#f18usoniyle2x)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M335,374.8125 L335,384.8125 L345,384.8125 L335,374.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="231" y="391.8794">helm-fd-class</text><!--MD5=[5fa17a1efdd398e28fa7575bea335940]
+reverse link helm-source-async to helm-fd-class--><path d="M98,268.0825 C98,280.3525 98,294.0925 98,307.7525 " fill="none" id="helm-source-async&lt;-helm-fd-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,267.9525,98,247.9525,105,267.9525,91,267.9525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M98,159.8325 C98,173.3925 98,187.8525 98,199.4925 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,159.8125,98,139.8125,105,159.8125,91,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[72237c03af2d61abdcad347f4ab92545]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-fd-class'**\n\n
+"helm-source-async" <|- - "helm-fd-class"
+class "helm-source-async"
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-fd-class" {
+ __ some interesting slots __
+ action
+ candidate-number-limit
+ candidates-process
+ filtered-candidate-transformer
+ help-message
+ keymap
+ nohighlight
+ requires-pattern
+}
+note right of "helm-fd-class"
+ **helm-fd-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-file-cache.png b/doc/helm-figures/helm-file-cache.png
new file mode 100644
index 00000000..ec6c884e
--- /dev/null
+++ b/doc/helm-figures/helm-file-cache.png
Binary files differ
diff --git a/doc/helm-figures/helm-file-cache.svg b/doc/helm-figures/helm-file-cache.svg
new file mode 100644
index 00000000..99b4ec69
--- /dev/null
+++ b/doc/helm-figures/helm-file-cache.svg
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="490px" preserveAspectRatio="none" style="width:444px;height:490px;" version="1.1" viewBox="0 0 444 490" width="444px" zoomAndPan="magnify"><defs><filter height="300%" id="fe67s8stbn6f9" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="105" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="166" x="142" y="37.6611">'helm-file-cache'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="228" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="228" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#fe67s8stbn6f9)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="239.8125" y2="239.8125"/><!--MD5=[11858bbdb8c329cf3bf1e5498cb0b794]
+class helm-file-cache--><rect fill="#FEFECE" filter="url(#fe67s8stbn6f9)" height="172.0469" id="helm-file-cache" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="125" y="307.8125"/><ellipse cx="140" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M142.9688,329.4531 Q142.3906,329.75 141.75,329.8906 Q141.1094,330.0469 140.4063,330.0469 Q137.9063,330.0469 136.5781,328.4063 Q135.2656,326.75 135.2656,323.625 Q135.2656,320.5 136.5781,318.8438 Q137.9063,317.1875 140.4063,317.1875 Q141.1094,317.1875 141.75,317.3438 Q142.4063,317.5 142.9688,317.7969 L142.9688,320.5156 Q142.3438,319.9375 141.75,319.6719 Q141.1563,319.3906 140.5313,319.3906 Q139.1875,319.3906 138.5,320.4688 Q137.8125,321.5313 137.8125,323.625 Q137.8125,325.7188 138.5,326.7969 Q139.1875,327.8594 140.5313,327.8594 Q141.1563,327.8594 141.75,327.5938 Q142.3438,327.3125 142.9688,326.7344 L142.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="107" x="154" y="327.9668">helm-file-cache</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="126" x2="263" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="131" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="131" y="383.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="131" y="396.437">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="131" y="409.2417">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="131" y="422.0464">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="131" y="434.8511">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="131" y="447.6558">search</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="72" x="131" y="460.4604">search-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="131" y="473.2651">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="126" x2="131" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="131" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="258" x2="263" y1="354.2148" y2="354.2148"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#fe67s8stbn6f9)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="226.5" y="199.8125"/><ellipse cx="241.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M244.4688,221.4531 Q243.8906,221.75 243.25,221.8906 Q242.6094,222.0469 241.9063,222.0469 Q239.4063,222.0469 238.0781,220.4063 Q236.7656,218.75 236.7656,215.625 Q236.7656,212.5 238.0781,210.8438 Q239.4063,209.1875 241.9063,209.1875 Q242.6094,209.1875 243.25,209.3438 Q243.9063,209.5 244.4688,209.7969 L244.4688,212.5156 Q243.8438,211.9375 243.25,211.6719 Q242.6563,211.3906 242.0313,211.3906 Q240.6875,211.3906 240,212.4688 Q239.3125,213.5313 239.3125,215.625 Q239.3125,217.7188 240,218.7969 Q240.6875,219.8594 242.0313,219.8594 Q242.6563,219.8594 243.25,219.5938 Q243.8438,219.3125 244.4688,218.7344 L244.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="255.5" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="227.5" x2="355.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="227.5" x2="355.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fe67s8stbn6f9)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="135" y="91.8125"/><ellipse cx="150" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M152.9688,113.4531 Q152.3906,113.75 151.75,113.8906 Q151.1094,114.0469 150.4063,114.0469 Q147.9063,114.0469 146.5781,112.4063 Q145.2656,110.75 145.2656,107.625 Q145.2656,104.5 146.5781,102.8438 Q147.9063,101.1875 150.4063,101.1875 Q151.1094,101.1875 151.75,101.3438 Q152.4063,101.5 152.9688,101.7969 L152.9688,104.5156 Q152.3438,103.9375 151.75,103.6719 Q151.1563,103.3906 150.5313,103.3906 Q149.1875,103.3906 148.5,104.4688 Q147.8125,105.5313 147.8125,107.625 Q147.8125,109.7188 148.5,110.7969 Q149.1875,111.8594 150.5313,111.8594 Q151.1563,111.8594 151.75,111.5938 Q152.3438,111.3125 152.9688,110.7344 L152.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="164" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="136" x2="253" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="136" x2="253" y1="131.8125" y2="131.8125"/><path d="M299,381.3125 L299,389.8125 L264.3,393.8125 L299,397.8125 L299,406.4453 A0,0 0 0 0 299,406.4453 L432,406.4453 A0,0 0 0 0 432,406.4453 L432,391.3125 L422,381.3125 L299,381.3125 A0,0 0 0 0 299,381.3125 " fill="#FBFB77" filter="url(#fe67s8stbn6f9)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M422,381.3125 L422,391.3125 L432,391.3125 L422,381.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="305" y="398.3794">helm-file-cache</text><!--MD5=[c3c98643be5ce25a89a8fc176b95e73f]
+reverse link helm-source-in-buffer to helm-file-cache--><path d="M121.77,265.5325 C129.06,278.2825 137.39,292.8625 145.75,307.4925 " fill="none" id="helm-source-in-buffer&lt;-helm-file-cache" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="115.49,268.6625,111.65,247.8225,127.65,261.7125,115.49,268.6625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[20fb0892ad389f5d9224faeaf3fbf8f9]
+reverse link helm-type-file to helm-file-cache--><path d="M267.99,265.5325 C260.63,278.2825 252.21,292.8625 243.76,307.4925 " fill="none" id="helm-type-file&lt;-helm-file-cache" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="262.15,261.6425,278.22,247.8225,274.28,268.6425,262.15,261.6425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M159.88,155.0425 C146.41,169.9125 131.42,186.4625 119.62,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="155.06,149.9425,173.67,139.8125,165.43,159.3325,155.06,149.9425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M229.48,155.0425 C243.09,169.9125 258.24,186.4625 270.16,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="223.89,159.2925,215.55,139.8125,234.21,149.8425,223.89,159.2925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c187c2778045b11ebcb4cf5f0c3a0ea9]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-file-cache'**\n\n
+"helm-source-in-buffer" <|- - "helm-file-cache"
+"helm-type-file" <|- - "helm-file-cache"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-file-cache" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-file-cache"
+ **helm-file-cache**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-files-dired-source.png b/doc/helm-figures/helm-files-dired-source.png
new file mode 100644
index 00000000..a525a90f
--- /dev/null
+++ b/doc/helm-figures/helm-files-dired-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-files-dired-source.svg b/doc/helm-figures/helm-files-dired-source.svg
new file mode 100644
index 00000000..3ce31e5d
--- /dev/null
+++ b/doc/helm-figures/helm-files-dired-source.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="426px" preserveAspectRatio="none" style="width:509px;height:426px;" version="1.1" viewBox="0 0 509 426" width="509px" zoomAndPan="magnify"><defs><filter height="300%" id="fuyzaglaqmq10" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="138" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="246" x="135" y="37.6611">'helm-files-dired-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="261" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="261" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#fuyzaglaqmq10)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[9c6bffcc58873ff705394a767f912448]
+class helm-files-dired-source--><rect fill="#FEFECE" filter="url(#fuyzaglaqmq10)" height="108.0234" id="helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.5;" width="196" x="75" y="307.8125"/><ellipse cx="90" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M92.9688,329.4531 Q92.3906,329.75 91.75,329.8906 Q91.1094,330.0469 90.4063,330.0469 Q87.9063,330.0469 86.5781,328.4063 Q85.2656,326.75 85.2656,323.625 Q85.2656,320.5 86.5781,318.8438 Q87.9063,317.1875 90.4063,317.1875 Q91.1094,317.1875 91.75,317.3438 Q92.4063,317.5 92.9688,317.7969 L92.9688,320.5156 Q92.3438,319.9375 91.75,319.6719 Q91.1563,319.3906 90.5313,319.3906 Q89.1875,319.3906 88.5,320.4688 Q87.8125,321.5313 87.8125,323.625 Q87.8125,325.7188 88.5,326.7969 Q89.1875,327.8594 90.5313,327.8594 Q91.1563,327.8594 91.75,327.5938 Q92.3438,327.3125 92.9688,326.7344 L92.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="104" y="327.9668">helm-files-dired-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="76" x2="270" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="81" y="370.8276">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="81" y="383.6323">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="81" y="396.437">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="81" y="409.2417">migemo</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="76" x2="109.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="109.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="236.5" x2="270" y1="354.2148" y2="354.2148"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#fuyzaglaqmq10)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="197" y="199.8125"/><ellipse cx="212" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M214.9688,221.4531 Q214.3906,221.75 213.75,221.8906 Q213.1094,222.0469 212.4063,222.0469 Q209.9063,222.0469 208.5781,220.4063 Q207.2656,218.75 207.2656,215.625 Q207.2656,212.5 208.5781,210.8438 Q209.9063,209.1875 212.4063,209.1875 Q213.1094,209.1875 213.75,209.3438 Q214.4063,209.5 214.9688,209.7969 L214.9688,212.5156 Q214.3438,211.9375 213.75,211.6719 Q213.1563,211.3906 212.5313,211.3906 Q211.1875,211.3906 210.5,212.4688 Q209.8125,213.5313 209.8125,215.625 Q209.8125,217.7188 210.5,218.7969 Q211.1875,219.8594 212.5313,219.8594 Q213.1563,219.8594 213.75,219.5938 Q214.3438,219.3125 214.9688,218.7344 L214.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="226" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198" x2="326" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198" x2="326" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fuyzaglaqmq10)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="113.5" y="91.8125"/><ellipse cx="128.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M131.4688,113.4531 Q130.8906,113.75 130.25,113.8906 Q129.6094,114.0469 128.9063,114.0469 Q126.4063,114.0469 125.0781,112.4063 Q123.7656,110.75 123.7656,107.625 Q123.7656,104.5 125.0781,102.8438 Q126.4063,101.1875 128.9063,101.1875 Q129.6094,101.1875 130.25,101.3438 Q130.9063,101.5 131.4688,101.7969 L131.4688,104.5156 Q130.8438,103.9375 130.25,103.6719 Q129.6563,103.3906 129.0313,103.3906 Q127.6875,103.3906 127,104.4688 Q126.3125,105.5313 126.3125,107.625 Q126.3125,109.7188 127,110.7969 Q127.6875,111.8594 129.0313,111.8594 Q129.6563,111.8594 130.25,111.5938 Q130.8438,111.3125 131.4688,110.7344 L131.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="142.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="114.5" x2="231.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="114.5" x2="231.5" y1="131.8125" y2="131.8125"/><path d="M306.5,349.3125 L306.5,357.8125 L271.4,361.8125 L306.5,365.8125 L306.5,374.4453 A0,0 0 0 0 306.5,374.4453 L497.5,374.4453 A0,0 0 0 0 497.5,374.4453 L497.5,359.3125 L487.5,349.3125 L306.5,349.3125 A0,0 0 0 0 306.5,349.3125 " fill="#FBFB77" filter="url(#fuyzaglaqmq10)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M487.5,349.3125 L487.5,359.3125 L497.5,359.3125 L487.5,349.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="170" x="312.5" y="366.3794">helm-files-dired-source</text><!--MD5=[808f17c2ae4c57b94c9dcfc78a1aa516]
+reverse link helm-source-sync to helm-files-dired-source--><path d="M110.18,264.8225 C118.95,278.2225 128.88,293.3825 138.2,307.6325 " fill="none" id="helm-source-sync&lt;-helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="104.19,268.4525,99.1,247.8825,115.91,260.7825,104.19,268.4525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[05800070c5d625a950fe67b1123c2019]
+reverse link helm-type-file to helm-files-dired-source--><path d="M235.82,264.8225 C227.05,278.2225 217.12,293.3825 207.8,307.6325 " fill="none" id="helm-type-file&lt;-helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="230.09,260.7825,246.9,247.8825,241.81,268.4525,230.09,260.7825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M140.5,155.5125 C128.12,170.2625 114.4,186.6025 103.58,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="135.47,150.6325,153.69,139.8125,146.19,159.6325,135.47,150.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M205.5,155.5125 C217.88,170.2625 231.6,186.6025 242.42,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="199.81,159.6325,192.31,139.8125,210.53,150.6325,199.81,159.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[622cd5c8b4196b7a8947a394b2102dfc]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-files-dired-source'**\n\n
+"helm-source-sync" <|- - "helm-files-dired-source"
+"helm-type-file" <|- - "helm-files-dired-source"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-files-dired-source" {
+ __ some interesting slots __
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-files-dired-source"
+ **helm-files-dired-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-files-in-current-dir-source.png b/doc/helm-figures/helm-files-in-current-dir-source.png
new file mode 100644
index 00000000..e8bb2484
--- /dev/null
+++ b/doc/helm-figures/helm-files-in-current-dir-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-files-in-current-dir-source.svg b/doc/helm-figures/helm-files-in-current-dir-source.svg
new file mode 100644
index 00000000..c8fa91cc
--- /dev/null
+++ b/doc/helm-figures/helm-files-in-current-dir-source.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="465px" preserveAspectRatio="none" style="width:595px;height:465px;" version="1.1" viewBox="0 0 595 465" width="595px" zoomAndPan="magnify"><defs><filter height="300%" id="f1s5lvxh8wai4r" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="180.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="330" x="135.5" y="37.6611">'helm-files-in-current-dir-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="303.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="303.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f1s5lvxh8wai4r)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[b49d18483e901ae1bf6135ad896f4fad]
+class helm-files-in-current-dir-source--><rect fill="#FEFECE" filter="url(#f1s5lvxh8wai4r)" height="146.4375" id="helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.5;" width="253" x="46.5" y="307.8125"/><ellipse cx="61.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M64.4688,329.4531 Q63.8906,329.75 63.25,329.8906 Q62.6094,330.0469 61.9063,330.0469 Q59.4063,330.0469 58.0781,328.4063 Q56.7656,326.75 56.7656,323.625 Q56.7656,320.5 58.0781,318.8438 Q59.4063,317.1875 61.9063,317.1875 Q62.6094,317.1875 63.25,317.3438 Q63.9063,317.5 64.4688,317.7969 L64.4688,320.5156 Q63.8438,319.9375 63.25,319.6719 Q62.6563,319.3906 62.0313,319.3906 Q60.6875,319.3906 60,320.4688 Q59.3125,321.5313 59.3125,323.625 Q59.3125,325.7188 60,326.7969 Q60.6875,327.8594 62.0313,327.8594 Q62.6563,327.8594 63.25,327.5938 Q63.8438,327.3125 64.4688,326.7344 L64.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="221" x="75.5" y="327.9668">helm-files-in-current-dir-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="47.5" x2="298.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="52.5" y="370.8276">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="52.5" y="383.6323">fuzzy-match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="52.5" y="396.437">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="52.5" y="409.2417">match-part</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="52.5" y="422.0464">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="52.5" y="434.8511">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="52.5" y="447.6558">pattern-transformer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="47.5" x2="109.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="109.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="236.5" x2="298.5" y1="354.2148" y2="354.2148"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#f1s5lvxh8wai4r)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="197" y="199.8125"/><ellipse cx="212" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M214.9688,221.4531 Q214.3906,221.75 213.75,221.8906 Q213.1094,222.0469 212.4063,222.0469 Q209.9063,222.0469 208.5781,220.4063 Q207.2656,218.75 207.2656,215.625 Q207.2656,212.5 208.5781,210.8438 Q209.9063,209.1875 212.4063,209.1875 Q213.1094,209.1875 213.75,209.3438 Q214.4063,209.5 214.9688,209.7969 L214.9688,212.5156 Q214.3438,211.9375 213.75,211.6719 Q213.1563,211.3906 212.5313,211.3906 Q211.1875,211.3906 210.5,212.4688 Q209.8125,213.5313 209.8125,215.625 Q209.8125,217.7188 210.5,218.7969 Q211.1875,219.8594 212.5313,219.8594 Q213.1563,219.8594 213.75,219.5938 Q214.3438,219.3125 214.9688,218.7344 L214.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="226" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198" x2="326" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198" x2="326" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1s5lvxh8wai4r)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="113.5" y="91.8125"/><ellipse cx="128.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M131.4688,113.4531 Q130.8906,113.75 130.25,113.8906 Q129.6094,114.0469 128.9063,114.0469 Q126.4063,114.0469 125.0781,112.4063 Q123.7656,110.75 123.7656,107.625 Q123.7656,104.5 125.0781,102.8438 Q126.4063,101.1875 128.9063,101.1875 Q129.6094,101.1875 130.25,101.3438 Q130.9063,101.5 131.4688,101.7969 L131.4688,104.5156 Q130.8438,103.9375 130.25,103.6719 Q129.6563,103.3906 129.0313,103.3906 Q127.6875,103.3906 127,104.4688 Q126.3125,105.5313 126.3125,107.625 Q126.3125,109.7188 127,110.7969 Q127.6875,111.8594 129.0313,111.8594 Q129.6563,111.8594 130.25,111.5938 Q130.8438,111.3125 131.4688,110.7344 L131.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="142.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="114.5" x2="231.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="114.5" x2="231.5" y1="131.8125" y2="131.8125"/><path d="M335,368.3125 L335,376.8125 L299.52,380.8125 L335,384.8125 L335,393.4453 A0,0 0 0 0 335,393.4453 L583,393.4453 A0,0 0 0 0 583,393.4453 L583,378.3125 L573,368.3125 L335,368.3125 A0,0 0 0 0 335,368.3125 " fill="#FBFB77" filter="url(#f1s5lvxh8wai4r)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M573,368.3125 L573,378.3125 L583,378.3125 L573,368.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="227" x="341" y="385.3794">helm-files-in-current-dir-source</text><!--MD5=[5935dd93b3799671c2a2f238d681efd2]
+reverse link helm-source-sync to helm-files-in-current-dir-source--><path d="M107.35,265.4825 C114.8,278.4425 123.27,293.1925 131.59,307.6925 " fill="none" id="helm-source-sync&lt;-helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="101.21,268.8425,97.32,248.0225,113.35,261.8725,101.21,268.8425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[3570d02ac558741aaeedfaae7abb82a0]
+reverse link helm-type-file to helm-files-in-current-dir-source--><path d="M238.65,265.4825 C231.2,278.4425 222.73,293.1925 214.41,307.6925 " fill="none" id="helm-type-file&lt;-helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="232.65,261.8725,248.68,248.0225,244.79,268.8425,232.65,261.8725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M140.5,155.5125 C128.12,170.2625 114.4,186.6025 103.58,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="135.47,150.6325,153.69,139.8125,146.19,159.6325,135.47,150.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M205.5,155.5125 C217.88,170.2625 231.6,186.6025 242.42,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="199.81,159.6325,192.31,139.8125,210.53,150.6325,199.81,159.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[de037b6aa04e7b2bd0355bc18a5c2467]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-files-in-current-dir-source'**\n\n
+"helm-source-sync" <|- - "helm-files-in-current-dir-source"
+"helm-type-file" <|- - "helm-files-in-current-dir-source"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-files-in-current-dir-source" {
+ __ some interesting slots __
+ candidates
+ fuzzy-match
+ match-dynamic
+ match-part
+ match-strict
+ migemo
+ pattern-transformer
+}
+note right of "helm-files-in-current-dir-source"
+ **helm-files-in-current-dir-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-gid-source.png b/doc/helm-figures/helm-gid-source.png
new file mode 100644
index 00000000..2cef3b79
--- /dev/null
+++ b/doc/helm-figures/helm-gid-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-gid-source.svg b/doc/helm-figures/helm-gid-source.svg
new file mode 100644
index 00000000..0fac7893
--- /dev/null
+++ b/doc/helm-figures/helm-gid-source.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="516px" preserveAspectRatio="none" style="width:377px;height:516px;" version="1.1" viewBox="0 0 377 516" width="377px" zoomAndPan="magnify"><defs><filter height="300%" id="fuzp320c75zmw" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="71.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="175" x="104" y="37.6611">'helm-gid-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="194.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="194.5" y="79.5674"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#fuzp320c75zmw)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="15.5" y="199.8125"/><ellipse cx="30.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M33.4688,221.4531 Q32.8906,221.75 32.25,221.8906 Q31.6094,222.0469 30.9063,222.0469 Q28.4063,222.0469 27.0781,220.4063 Q25.7656,218.75 25.7656,215.625 Q25.7656,212.5 27.0781,210.8438 Q28.4063,209.1875 30.9063,209.1875 Q31.6094,209.1875 32.25,209.3438 Q32.9063,209.5 33.4688,209.7969 L33.4688,212.5156 Q32.8438,211.9375 32.25,211.6719 Q31.6563,211.3906 31.0313,211.3906 Q29.6875,211.3906 29,212.4688 Q28.3125,213.5313 28.3125,215.625 Q28.3125,217.7188 29,218.7969 Q29.6875,219.8594 31.0313,219.8594 Q31.6563,219.8594 32.25,219.5938 Q32.8438,219.3125 33.4688,218.7344 L33.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="44.5" y="219.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="239.8125" y2="239.8125"/><!--MD5=[d36bc6d3d79507f675f4471be5eaf52f]
+class helm-gid-source--><rect fill="#FEFECE" filter="url(#fuzp320c75zmw)" height="197.6563" id="helm-gid-source" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="307.8125"/><ellipse cx="38.1" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M41.0688,329.4531 Q40.4906,329.75 39.85,329.8906 Q39.2094,330.0469 38.5063,330.0469 Q36.0063,330.0469 34.6781,328.4063 Q33.3656,326.75 33.3656,323.625 Q33.3656,320.5 34.6781,318.8438 Q36.0063,317.1875 38.5063,317.1875 Q39.2094,317.1875 39.85,317.3438 Q40.5063,317.5 41.0688,317.7969 L41.0688,320.5156 Q40.4438,319.9375 39.85,319.6719 Q39.2563,319.3906 38.6313,319.3906 Q37.2875,319.3906 36.6,320.4688 Q35.9125,321.5313 35.9125,323.625 Q35.9125,325.7188 36.6,326.7969 Q37.2875,327.8594 38.6313,327.8594 Q39.2563,327.8594 39.85,327.5938 Q40.4438,327.3125 41.0688,326.7344 L41.0688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="114" x="55.9" y="327.9668">helm-gid-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="370.8276">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="383.6323">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="396.437">candidates-process</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="409.2417">db-dir</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="422.0464">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="76" x="12" y="434.8511">header-name</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="447.6558">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="12" y="460.4604">history</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="473.2651">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="12" y="486.0698">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="12" y="498.8745">requires-pattern</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fuzp320c75zmw)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><path d="M225,394.3125 L225,402.8125 L190.34,406.8125 L225,410.8125 L225,419.4453 A0,0 0 0 0 225,419.4453 L365,419.4453 A0,0 0 0 0 365,419.4453 L365,404.3125 L355,394.3125 L225,394.3125 A0,0 0 0 0 225,394.3125 " fill="#FBFB77" filter="url(#fuzp320c75zmw)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M355,394.3125 L355,404.3125 L365,404.3125 L355,394.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="231" y="411.3794">helm-gid-source</text><!--MD5=[b87e7a6cd6a876f20d8b301dfc1041b2]
+reverse link helm-source-async to helm-gid-source--><path d="M98,268.3425 C98,280.3225 98,293.8325 98,307.5725 " fill="none" id="helm-source-async&lt;-helm-gid-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,268.1025,98,248.1025,105,268.1025,91,268.1025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M98,159.8325 C98,173.3925 98,187.8525 98,199.4925 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,159.8125,98,139.8125,105,159.8125,91,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7443060113d122c368d2c13424c1ddb7]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-gid-source'**\n\n
+"helm-source-async" <|- - "helm-gid-source"
+class "helm-source-async"
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-gid-source" {
+ __ some interesting slots __
+ action
+ candidate-number-limit
+ candidates-process
+ db-dir
+ filtered-candidate-transformer
+ header-name
+ help-message
+ history
+ nohighlight
+ persistent-action
+ requires-pattern
+}
+note right of "helm-gid-source"
+ **helm-gid-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-grep-ag-class.png b/doc/helm-figures/helm-grep-ag-class.png
new file mode 100644
index 00000000..70d4475a
--- /dev/null
+++ b/doc/helm-figures/helm-grep-ag-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-grep-ag-class.svg b/doc/helm-figures/helm-grep-ag-class.svg
new file mode 100644
index 00000000..cc2689b0
--- /dev/null
+++ b/doc/helm-figures/helm-grep-ag-class.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="542px" preserveAspectRatio="none" style="width:400px;height:542px;" version="1.1" viewBox="0 0 400 542" width="400px" zoomAndPan="magnify"><defs><filter height="300%" id="f1ixg3k1rclaa4" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="83.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="205" x="101" y="37.6611">'helm-grep-ag-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="206.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="206.5" y="79.5674"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#f1ixg3k1rclaa4)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="15.5" y="199.8125"/><ellipse cx="30.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M33.4688,221.4531 Q32.8906,221.75 32.25,221.8906 Q31.6094,222.0469 30.9063,222.0469 Q28.4063,222.0469 27.0781,220.4063 Q25.7656,218.75 25.7656,215.625 Q25.7656,212.5 27.0781,210.8438 Q28.4063,209.1875 30.9063,209.1875 Q31.6094,209.1875 32.25,209.3438 Q32.9063,209.5 33.4688,209.7969 L33.4688,212.5156 Q32.8438,211.9375 32.25,211.6719 Q31.6563,211.3906 31.0313,211.3906 Q29.6875,211.3906 29,212.4688 Q28.3125,213.5313 28.3125,215.625 Q28.3125,217.7188 29,218.7969 Q29.6875,219.8594 31.0313,219.8594 Q31.6563,219.8594 32.25,219.5938 Q32.8438,219.3125 33.4688,218.7344 L33.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="44.5" y="219.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="239.8125" y2="239.8125"/><!--MD5=[48c627d917d22eb9e4865aed3bf653fb]
+class helm-grep-ag-class--><rect fill="#FEFECE" filter="url(#f1ixg3k1rclaa4)" height="223.2656" id="helm-grep-ag-class" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="307.8125"/><ellipse cx="28.2" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M31.1688,329.4531 Q30.5906,329.75 29.95,329.8906 Q29.3094,330.0469 28.6063,330.0469 Q26.1063,330.0469 24.7781,328.4063 Q23.4656,326.75 23.4656,323.625 Q23.4656,320.5 24.7781,318.8438 Q26.1063,317.1875 28.6063,317.1875 Q29.3094,317.1875 29.95,317.3438 Q30.6063,317.5 31.1688,317.7969 L31.1688,320.5156 Q30.5438,319.9375 29.95,319.6719 Q29.3563,319.3906 28.7313,319.3906 Q27.3875,319.3906 26.7,320.4688 Q26.0125,321.5313 26.0125,323.625 Q26.0125,325.7188 26.7,326.7969 Q27.3875,327.8594 28.7313,327.8594 Q29.3563,327.8594 29.95,327.5938 Q30.5438,327.3125 31.1688,326.7344 L31.1688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="43.8" y="327.9668">helm-grep-ag-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="370.8276">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="383.6323">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="396.437">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="409.2417">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="422.0464">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="12" y="434.8511">history</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="447.6558">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="460.4604">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="12" y="473.2651">nomark</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="12" y="486.0698">pcre</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="12" y="498.8745">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="12" y="511.6792">persistent-help</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="12" y="524.4839">requires-pattern</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1ixg3k1rclaa4)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><path d="M225.5,406.8125 L225.5,415.3125 L190.25,419.3125 L225.5,423.3125 L225.5,431.9453 A0,0 0 0 0 225.5,431.9453 L388.5,431.9453 A0,0 0 0 0 388.5,431.9453 L388.5,416.8125 L378.5,406.8125 L225.5,406.8125 A0,0 0 0 0 225.5,406.8125 " fill="#FBFB77" filter="url(#f1ixg3k1rclaa4)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M378.5,406.8125 L378.5,416.8125 L388.5,416.8125 L378.5,406.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="142" x="231.5" y="423.8794">helm-grep-ag-class</text><!--MD5=[e220d22ad778b6230f0552c8a1eae9ee]
+reverse link helm-source-async to helm-grep-ag-class--><path d="M98,268.3225 C98,280.2925 98,293.8425 98,307.7825 " fill="none" id="helm-source-async&lt;-helm-grep-ag-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,268.1525,98,248.1525,105,268.1525,91,268.1525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M98,159.8325 C98,173.3925 98,187.8525 98,199.4925 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,159.8125,98,139.8125,105,159.8125,91,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b7d1f337b208ac00f328bb7eef5406c7]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-grep-ag-class'**\n\n
+"helm-source-async" <|- - "helm-grep-ag-class"
+class "helm-source-async"
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-grep-ag-class" {
+ __ some interesting slots __
+ action
+ candidate-number-limit
+ filtered-candidate-transformer
+ group
+ help-message
+ history
+ keymap
+ nohighlight
+ nomark
+ pcre
+ persistent-action
+ persistent-help
+ requires-pattern
+}
+note right of "helm-grep-ag-class"
+ **helm-grep-ag-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-grep-class.png b/doc/helm-figures/helm-grep-class.png
new file mode 100644
index 00000000..a3541e38
--- /dev/null
+++ b/doc/helm-figures/helm-grep-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-grep-class.svg b/doc/helm-figures/helm-grep-class.svg
new file mode 100644
index 00000000..1544d2c6
--- /dev/null
+++ b/doc/helm-figures/helm-grep-class.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="593px" preserveAspectRatio="none" style="width:376px;height:593px;" version="1.1" viewBox="0 0 376 593" width="376px" zoomAndPan="magnify"><defs><filter height="300%" id="f1ru64uwkhcblu" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="71.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="173" x="105" y="37.6611">'helm-grep-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="194.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="194.5" y="79.5674"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#f1ru64uwkhcblu)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="15.5" y="199.8125"/><ellipse cx="30.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M33.4688,221.4531 Q32.8906,221.75 32.25,221.8906 Q31.6094,222.0469 30.9063,222.0469 Q28.4063,222.0469 27.0781,220.4063 Q25.7656,218.75 25.7656,215.625 Q25.7656,212.5 27.0781,210.8438 Q28.4063,209.1875 30.9063,209.1875 Q31.6094,209.1875 32.25,209.3438 Q32.9063,209.5 33.4688,209.7969 L33.4688,212.5156 Q32.8438,211.9375 32.25,211.6719 Q31.6563,211.3906 31.0313,211.3906 Q29.6875,211.3906 29,212.4688 Q28.3125,213.5313 28.3125,215.625 Q28.3125,217.7188 29,218.7969 Q29.6875,219.8594 31.0313,219.8594 Q31.6563,219.8594 32.25,219.5938 Q32.8438,219.3125 33.4688,218.7344 L33.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="44.5" y="219.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="179.5" y1="239.8125" y2="239.8125"/><!--MD5=[91bb0adfdf7bf369d8d23bbe4e952f89]
+class helm-grep-class--><rect fill="#FEFECE" filter="url(#f1ru64uwkhcblu)" height="274.4844" id="helm-grep-class" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="307.8125"/><ellipse cx="38.55" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M41.5188,329.4531 Q40.9406,329.75 40.3,329.8906 Q39.6594,330.0469 38.9563,330.0469 Q36.4563,330.0469 35.1281,328.4063 Q33.8156,326.75 33.8156,323.625 Q33.8156,320.5 35.1281,318.8438 Q36.4563,317.1875 38.9563,317.1875 Q39.6594,317.1875 40.3,317.3438 Q40.9563,317.5 41.5188,317.7969 L41.5188,320.5156 Q40.8938,319.9375 40.3,319.6719 Q39.7063,319.3906 39.0813,319.3906 Q37.7375,319.3906 37.05,320.4688 Q36.3625,321.5313 36.3625,323.625 Q36.3625,325.7188 37.05,326.7969 Q37.7375,327.8594 39.0813,327.8594 Q39.7063,327.8594 40.3,327.5938 Q40.8938,327.3125 41.5188,326.7344 L41.5188,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="56.45" y="327.9668">helm-grep-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="370.8276">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="12" y="383.6323">after-init-hook</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="47" x="12" y="396.437">backend</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="89" x="12" y="409.2417">before-init-hook</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="422.0464">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="12" y="434.8511">candidates-process</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="447.6558">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="460.4604">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="473.2651">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="12" y="486.0698">history</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="498.8745">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="511.6792">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="12" y="524.4839">nomark</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="12" y="537.2886">pcre</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="12" y="550.0933">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="12" y="562.8979">persistent-help</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="12" y="575.7026">requires-pattern</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1ru64uwkhcblu)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><path d="M225.5,432.3125 L225.5,440.8125 L190.34,444.8125 L225.5,448.8125 L225.5,457.4453 A0,0 0 0 0 225.5,457.4453 L364.5,457.4453 A0,0 0 0 0 364.5,457.4453 L364.5,442.3125 L354.5,432.3125 L225.5,432.3125 A0,0 0 0 0 225.5,432.3125 " fill="#FBFB77" filter="url(#f1ru64uwkhcblu)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M354.5,432.3125 L354.5,442.3125 L364.5,442.3125 L354.5,432.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="118" x="231.5" y="449.3794">helm-grep-class</text><!--MD5=[99faec0dbdb16852c37e6e30b1aacff5]
+reverse link helm-source-async to helm-grep-class--><path d="M98,268.2725 C98,280.0925 98,293.5525 98,307.6325 " fill="none" id="helm-source-async&lt;-helm-grep-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,267.8325,98,247.8325,105,267.8325,91,267.8325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M98,159.8325 C98,173.3925 98,187.8525 98,199.4925 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,159.8125,98,139.8125,105,159.8125,91,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[297030e255d81ccad4d31be8224cc600]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-grep-class'**\n\n
+"helm-source-async" <|- - "helm-grep-class"
+class "helm-source-async"
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-grep-class" {
+ __ some interesting slots __
+ action
+ after-init-hook
+ backend
+ before-init-hook
+ candidate-number-limit
+ candidates-process
+ filtered-candidate-transformer
+ group
+ help-message
+ history
+ keymap
+ nohighlight
+ nomark
+ pcre
+ persistent-action
+ persistent-help
+ requires-pattern
+}
+note right of "helm-grep-class"
+ **helm-grep-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-idle-time-timers-class.png b/doc/helm-figures/helm-idle-time-timers-class.png
new file mode 100644
index 00000000..082fe45b
--- /dev/null
+++ b/doc/helm-figures/helm-idle-time-timers-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-idle-time-timers-class.svg b/doc/helm-figures/helm-idle-time-timers-class.svg
new file mode 100644
index 00000000..d35ab696
--- /dev/null
+++ b/doc/helm-figures/helm-idle-time-timers-class.svg
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="452px" preserveAspectRatio="none" style="width:559px;height:452px;" version="1.1" viewBox="0 0 559 452" width="559px" zoomAndPan="magnify"><defs><filter height="300%" id="f5qn4uknt8vv3" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="163" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="287" x="139.5" y="37.6611">'helm-idle-time-timers-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="286" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="286" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f5qn4uknt8vv3)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[65c9e2a5e033ac2de329b35010304c74]
+class helm-idle-time-timers-class--><rect fill="#FEFECE" filter="url(#f5qn4uknt8vv3)" height="133.6328" id="helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="224" x="67" y="307.8125"/><ellipse cx="82" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M84.9688,329.4531 Q84.3906,329.75 83.75,329.8906 Q83.1094,330.0469 82.4063,330.0469 Q79.9063,330.0469 78.5781,328.4063 Q77.2656,326.75 77.2656,323.625 Q77.2656,320.5 78.5781,318.8438 Q79.9063,317.1875 82.4063,317.1875 Q83.1094,317.1875 83.75,317.3438 Q84.4063,317.5 84.9688,317.7969 L84.9688,320.5156 Q84.3438,319.9375 83.75,319.6719 Q83.1563,319.3906 82.5313,319.3906 Q81.1875,319.3906 80.5,320.4688 Q79.8125,321.5313 79.8125,323.625 Q79.8125,325.7188 80.5,326.7969 Q81.1875,327.8594 82.5313,327.8594 Q83.1563,327.8594 83.75,327.5938 Q84.3438,327.3125 84.9688,326.7344 L84.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="192" x="96" y="327.9668">helm-idle-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="68" x2="290" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="61" x="73" y="370.8276">allow-dups</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="128" x="73" y="383.6323">candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="73" y="396.437">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="73" y="409.2417">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="73" y="422.0464">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="73" y="434.8511">migemo</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="68" x2="115.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="115.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="242.5" x2="290" y1="354.2148" y2="354.2148"/><!--MD5=[d89fbe3a66aa0ad58442d3fbb0e3c04d]
+class helm-type-timers--><rect fill="#FEFECE" filter="url(#f5qn4uknt8vv3)" height="48" id="helm-type-timers" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="197.5" y="199.8125"/><ellipse cx="212.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M215.4688,221.4531 Q214.8906,221.75 214.25,221.8906 Q213.6094,222.0469 212.9063,222.0469 Q210.4063,222.0469 209.0781,220.4063 Q207.7656,218.75 207.7656,215.625 Q207.7656,212.5 209.0781,210.8438 Q210.4063,209.1875 212.9063,209.1875 Q213.6094,209.1875 214.25,209.3438 Q214.9063,209.5 215.4688,209.7969 L215.4688,212.5156 Q214.8438,211.9375 214.25,211.6719 Q213.6563,211.3906 213.0313,211.3906 Q211.6875,211.3906 211,212.4688 Q210.3125,213.5313 210.3125,215.625 Q210.3125,217.7188 211,218.7969 Q211.6875,219.8594 213.0313,219.8594 Q213.6563,219.8594 214.25,219.5938 Q214.8438,219.3125 215.4688,218.7344 L215.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="226.5" y="219.9668">helm-type-timers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="349.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="349.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f5qn4uknt8vv3)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="119.5" y="91.8125"/><ellipse cx="134.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M137.4688,113.4531 Q136.8906,113.75 136.25,113.8906 Q135.6094,114.0469 134.9063,114.0469 Q132.4063,114.0469 131.0781,112.4063 Q129.7656,110.75 129.7656,107.625 Q129.7656,104.5 131.0781,102.8438 Q132.4063,101.1875 134.9063,101.1875 Q135.6094,101.1875 136.25,101.3438 Q136.9063,101.5 137.4688,101.7969 L137.4688,104.5156 Q136.8438,103.9375 136.25,103.6719 Q135.6563,103.3906 135.0313,103.3906 Q133.6875,103.3906 133,104.4688 Q132.3125,105.5313 132.3125,107.625 Q132.3125,109.7188 133,110.7969 Q133.6875,111.8594 135.0313,111.8594 Q135.6563,111.8594 136.25,111.5938 Q136.8438,111.3125 137.4688,110.7344 L137.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="148.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="120.5" x2="237.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="120.5" x2="237.5" y1="131.8125" y2="131.8125"/><path d="M326.5,362.3125 L326.5,370.8125 L291.12,374.8125 L326.5,378.8125 L326.5,387.4453 A0,0 0 0 0 326.5,387.4453 L547.5,387.4453 A0,0 0 0 0 547.5,387.4453 L547.5,372.3125 L537.5,362.3125 L326.5,362.3125 A0,0 0 0 0 326.5,362.3125 " fill="#FBFB77" filter="url(#f5qn4uknt8vv3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M537.5,362.3125 L537.5,372.3125 L547.5,372.3125 L537.5,362.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="332.5" y="379.3794">helm-idle-time-timers-class</text><!--MD5=[e9dfd0d46d933b60dace2e76a6fa8e40]
+reverse link helm-source-sync to helm-idle-time-timers-class--><path d="M109.73,265.1725 C118.07,278.2525 127.56,293.1325 136.78,307.5925 " fill="none" id="helm-source-sync&lt;-helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="103.69,268.7225,98.84,248.0925,115.5,261.1925,103.69,268.7225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f7040a49218bb3669d1c90cd85142f6d]
+reverse link helm-type-timers to helm-idle-time-timers-class--><path d="M248.27,265.1725 C239.93,278.2525 230.44,293.1325 221.22,307.5925 " fill="none" id="helm-type-timers&lt;-helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="242.5,261.1925,259.16,248.0925,254.31,268.7225,242.5,261.1925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M144.74,155.0425 C131.41,169.9125 116.58,186.4625 104.9,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="139.83,150.0325,158.39,139.8125,150.25,159.3825,139.83,150.0325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[687fc8ec140e945488f732dae3c46e2b]
+reverse link helm-source to helm-type-timers--><path d="M213.26,155.0425 C226.59,169.9125 241.42,186.4625 253.1,199.4925 " fill="none" id="helm-source&lt;-helm-type-timers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="207.75,159.3825,199.61,139.8125,218.17,150.0325,207.75,159.3825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a3cc4a8c6cbb34c0e13ed82745debc32]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-idle-time-timers-class'**\n\n
+"helm-source-sync" <|- - "helm-idle-time-timers-class"
+"helm-type-timers" <|- - "helm-idle-time-timers-class"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-timers"
+"helm-source" <|- - "helm-type-timers"
+class "helm-source"
+class "helm-idle-time-timers-class" {
+ __ some interesting slots __
+ allow-dups
+ candidate-transformer
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-idle-time-timers-class"
+ **helm-idle-time-timers-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-imenu-source.png b/doc/helm-figures/helm-imenu-source.png
new file mode 100644
index 00000000..6f0a2ca5
--- /dev/null
+++ b/doc/helm-figures/helm-imenu-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-imenu-source.svg b/doc/helm-figures/helm-imenu-source.svg
new file mode 100644
index 00000000..2a304359
--- /dev/null
+++ b/doc/helm-figures/helm-imenu-source.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="490px" preserveAspectRatio="none" style="width:381px;height:490px;" version="1.1" viewBox="0 0 381 490" width="381px" zoomAndPan="magnify"><defs><filter height="300%" id="f17yztnzp31wf2" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="73.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="205" x="91" y="37.6611">'helm-imenu-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="196.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="196.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f17yztnzp31wf2)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="11.5" y="199.8125"/><ellipse cx="26.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M29.4688,221.4531 Q28.8906,221.75 28.25,221.8906 Q27.6094,222.0469 26.9063,222.0469 Q24.4063,222.0469 23.0781,220.4063 Q21.7656,218.75 21.7656,215.625 Q21.7656,212.5 23.0781,210.8438 Q24.4063,209.1875 26.9063,209.1875 Q27.6094,209.1875 28.25,209.3438 Q28.9063,209.5 29.4688,209.7969 L29.4688,212.5156 Q28.8438,211.9375 28.25,211.6719 Q27.6563,211.3906 27.0313,211.3906 Q25.6875,211.3906 25,212.4688 Q24.3125,213.5313 24.3125,215.625 Q24.3125,217.7188 25,218.7969 Q25.6875,219.8594 27.0313,219.8594 Q27.6563,219.8594 28.25,219.5938 Q28.8438,219.3125 29.4688,218.7344 L29.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="40.5" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="12.5" x2="166.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="12.5" x2="166.5" y1="239.8125" y2="239.8125"/><!--MD5=[a7554553637232b99c06721dc00b929c]
+class helm-imenu-source--><rect fill="#FEFECE" filter="url(#f17yztnzp31wf2)" height="172.0469" id="helm-imenu-source" style="stroke: #A80036; stroke-width: 1.5;" width="167" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="135" x="35" y="327.9668">helm-imenu-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="172" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="370.8276">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="128" x="12" y="383.6323">candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="396.437">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="409.2417">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="422.0464">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="434.8511">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="12" y="447.6558">nomark</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="12" y="460.4604">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="12" y="473.2651">persistent-help</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="26" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="26" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="153" x2="172" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f17yztnzp31wf2)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="30" y="91.8125"/><ellipse cx="45" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M47.9688,113.4531 Q47.3906,113.75 46.75,113.8906 Q46.1094,114.0469 45.4063,114.0469 Q42.9063,114.0469 41.5781,112.4063 Q40.2656,110.75 40.2656,107.625 Q40.2656,104.5 41.5781,102.8438 Q42.9063,101.1875 45.4063,101.1875 Q46.1094,101.1875 46.75,101.3438 Q47.4063,101.5 47.9688,101.7969 L47.9688,104.5156 Q47.3438,103.9375 46.75,103.6719 Q46.1563,103.3906 45.5313,103.3906 Q44.1875,103.3906 43.5,104.4688 Q42.8125,105.5313 42.8125,107.625 Q42.8125,109.7188 43.5,110.7969 Q44.1875,111.8594 45.5313,111.8594 Q46.1563,111.8594 46.75,111.5938 Q47.3438,111.3125 47.9688,110.7344 L47.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="59" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="31" x2="148" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="31" x2="148" y1="131.8125" y2="131.8125"/><path d="M208,381.3125 L208,389.8125 L173.06,393.8125 L208,397.8125 L208,406.4453 A0,0 0 0 0 208,406.4453 L369,406.4453 A0,0 0 0 0 369,406.4453 L369,391.3125 L359,381.3125 L208,381.3125 A0,0 0 0 0 208,381.3125 " fill="#FBFB77" filter="url(#f17yztnzp31wf2)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M359,381.3125 L359,391.3125 L369,391.3125 L359,381.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="140" x="214" y="398.3794">helm-imenu-source</text><!--MD5=[ca4b9f09c13c1ff3b2602cf75a58548c]
+reverse link helm-source-sync to helm-imenu-source--><path d="M89.5,268.2625 C89.5,280.3425 89.5,293.8925 89.5,307.4925 " fill="none" id="helm-source-sync&lt;-helm-imenu-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="82.5,267.8225,89.5,247.8225,96.5,267.8225,82.5,267.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M89.5,159.8325 C89.5,173.3925 89.5,187.8525 89.5,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="82.5,159.8125,89.5,139.8125,96.5,159.8125,82.5,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[cd8cb0b584136ff74199abe77de19420]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-imenu-source'**\n\n
+"helm-source-sync" <|- - "helm-imenu-source"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-imenu-source" {
+ __ some interesting slots __
+ action
+ candidate-transformer
+ candidates
+ group
+ help-message
+ keymap
+ nomark
+ persistent-action
+ persistent-help
+}
+note right of "helm-imenu-source"
+ **helm-imenu-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-info-source.png b/doc/helm-figures/helm-info-source.png
new file mode 100644
index 00000000..9edfd78d
--- /dev/null
+++ b/doc/helm-figures/helm-info-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-info-source.svg b/doc/helm-figures/helm-info-source.svg
new file mode 100644
index 00000000..d1a62a7b
--- /dev/null
+++ b/doc/helm-figures/helm-info-source.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="439px" preserveAspectRatio="none" style="width:365px;height:439px;" version="1.1" viewBox="0 0 365 439" width="365px" zoomAndPan="magnify"><defs><filter height="300%" id="f1vbuzu7gasfaf" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="66" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="182" x="95" y="37.6611">'helm-info-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="189" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="189" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f1vbuzu7gasfaf)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="239.8125" y2="239.8125"/><!--MD5=[1d6ee517c209485192c7fd1a0dfbbf09]
+class helm-info-source--><rect fill="#FEFECE" filter="url(#f1vbuzu7gasfaf)" height="120.8281" id="helm-info-source" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="23" y="307.8125"/><ellipse cx="38" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M40.9688,329.4531 Q40.3906,329.75 39.75,329.8906 Q39.1094,330.0469 38.4063,330.0469 Q35.9063,330.0469 34.5781,328.4063 Q33.2656,326.75 33.2656,323.625 Q33.2656,320.5 34.5781,318.8438 Q35.9063,317.1875 38.4063,317.1875 Q39.1094,317.1875 39.75,317.3438 Q40.4063,317.5 40.9688,317.7969 L40.9688,320.5156 Q40.3438,319.9375 39.75,319.6719 Q39.1563,319.3906 38.5313,319.3906 Q37.1875,319.3906 36.5,320.4688 Q35.8125,321.5313 35.8125,323.625 Q35.8125,325.7188 36.5,326.7969 Q37.1875,327.8594 38.5313,327.8594 Q39.1563,327.8594 39.75,327.5938 Q40.3438,327.3125 40.9688,326.7344 L40.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="52" y="327.9668">helm-info-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="173" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="29" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="29" y="383.6323">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="29" y="396.437">display-to-real</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="29" y="409.2417">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="29" y="422.0464">info-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="24" x2="35" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="35" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="162" x2="173" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1vbuzu7gasfaf)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="39" y="91.8125"/><ellipse cx="54" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.9688,113.4531 Q56.3906,113.75 55.75,113.8906 Q55.1094,114.0469 54.4063,114.0469 Q51.9063,114.0469 50.5781,112.4063 Q49.2656,110.75 49.2656,107.625 Q49.2656,104.5 50.5781,102.8438 Q51.9063,101.1875 54.4063,101.1875 Q55.1094,101.1875 55.75,101.3438 Q56.4063,101.5 56.9688,101.7969 L56.9688,104.5156 Q56.3438,103.9375 55.75,103.6719 Q55.1563,103.3906 54.5313,103.3906 Q53.1875,103.3906 52.5,104.4688 Q51.8125,105.5313 51.8125,107.625 Q51.8125,109.7188 52.5,110.7969 Q53.1875,111.8594 54.5313,111.8594 Q55.1563,111.8594 55.75,111.5938 Q56.3438,111.3125 56.9688,110.7344 L56.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="68" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="157" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="157" y1="131.8125" y2="131.8125"/><path d="M209.5,355.8125 L209.5,364.3125 L174.27,368.3125 L209.5,372.3125 L209.5,380.9453 A0,0 0 0 0 209.5,380.9453 L353.5,380.9453 A0,0 0 0 0 353.5,380.9453 L353.5,365.8125 L343.5,355.8125 L209.5,355.8125 A0,0 0 0 0 209.5,355.8125 " fill="#FBFB77" filter="url(#f1vbuzu7gasfaf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M343.5,355.8125 L343.5,365.8125 L353.5,365.8125 L343.5,355.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="123" x="215.5" y="372.8794">helm-info-source</text><!--MD5=[c6f34f9bfe3eab31f5a0ea3dc389c5d2]
+reverse link helm-source-in-buffer to helm-info-source--><path d="M98.5,268.4225 C98.5,280.7625 98.5,294.4025 98.5,307.5225 " fill="none" id="helm-source-in-buffer&lt;-helm-info-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91.5,268.0225,98.5,248.0225,105.5,268.0225,91.5,268.0225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M98.5,159.8325 C98.5,173.3925 98.5,187.8525 98.5,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91.5,159.8125,98.5,139.8125,105.5,159.8125,91.5,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[070e836ba103422e82716649749f2383]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-info-source'**\n\n
+"helm-source-in-buffer" <|- - "helm-info-source"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-info-source" {
+ __ some interesting slots __
+ init
+ action
+ display-to-real
+ get-line
+ info-file
+}
+note right of "helm-info-source"
+ **helm-info-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-list-el-package-source.png b/doc/helm-figures/helm-list-el-package-source.png
new file mode 100644
index 00000000..b4f77f06
--- /dev/null
+++ b/doc/helm-figures/helm-list-el-package-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-list-el-package-source.svg b/doc/helm-figures/helm-list-el-package-source.svg
new file mode 100644
index 00000000..40deb9ef
--- /dev/null
+++ b/doc/helm-figures/helm-list-el-package-source.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="503px" preserveAspectRatio="none" style="width:507px;height:503px;" version="1.1" viewBox="0 0 507 503" width="507px" zoomAndPan="magnify"><defs><filter height="300%" id="f1wii9l5jepj0" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="136.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="292" x="110.5" y="37.6611">'helm-list-el-package-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="259.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="259.5" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f1wii9l5jepj0)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="28" y="199.8125"/><ellipse cx="43" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M45.9688,221.4531 Q45.3906,221.75 44.75,221.8906 Q44.1094,222.0469 43.4063,222.0469 Q40.9063,222.0469 39.5781,220.4063 Q38.2656,218.75 38.2656,215.625 Q38.2656,212.5 39.5781,210.8438 Q40.9063,209.1875 43.4063,209.1875 Q44.1094,209.1875 44.75,209.3438 Q45.4063,209.5 45.9688,209.7969 L45.9688,212.5156 Q45.3438,211.9375 44.75,211.6719 Q44.1563,211.3906 43.5313,211.3906 Q42.1875,211.3906 41.5,212.4688 Q40.8125,213.5313 40.8125,215.625 Q40.8125,217.7188 41.5,218.7969 Q42.1875,219.8594 43.5313,219.8594 Q44.1563,219.8594 44.75,219.5938 Q45.3438,219.3125 45.9688,218.7344 L45.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="57" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="29" x2="212" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="29" x2="212" y1="239.8125" y2="239.8125"/><!--MD5=[cea65451dee1c19877355cf9a9f1c806]
+class helm-list-el-package-source--><rect fill="#FEFECE" filter="url(#f1wii9l5jepj0)" height="184.8516" id="helm-list-el-package-source" style="stroke: #A80036; stroke-width: 1.5;" width="229" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="197" x="35" y="327.9668">helm-list-el-package-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="234" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="12" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="383.6323">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="12" y="396.437">action-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="409.2417">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="422.0464">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="12" y="434.8511">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="447.6558">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="460.4604">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="473.2651">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="12" y="486.0698">update</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="57" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="57" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="184" x2="234" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1wii9l5jepj0)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="61" y="91.8125"/><ellipse cx="76" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M78.9688,113.4531 Q78.3906,113.75 77.75,113.8906 Q77.1094,114.0469 76.4063,114.0469 Q73.9063,114.0469 72.5781,112.4063 Q71.2656,110.75 71.2656,107.625 Q71.2656,104.5 72.5781,102.8438 Q73.9063,101.1875 76.4063,101.1875 Q77.1094,101.1875 77.75,101.3438 Q78.4063,101.5 78.9688,101.7969 L78.9688,104.5156 Q78.3438,103.9375 77.75,103.6719 Q77.1563,103.3906 76.5313,103.3906 Q75.1875,103.3906 74.5,104.4688 Q73.8125,105.5313 73.8125,107.625 Q73.8125,109.7188 74.5,110.7969 Q75.1875,111.8594 76.5313,111.8594 Q77.1563,111.8594 77.75,111.5938 Q78.3438,111.3125 78.9688,110.7344 L78.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="90" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="62" x2="179" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="62" x2="179" y1="131.8125" y2="131.8125"/><path d="M270,387.8125 L270,396.3125 L235.12,400.3125 L270,404.3125 L270,412.9453 A0,0 0 0 0 270,412.9453 L495,412.9453 A0,0 0 0 0 495,412.9453 L495,397.8125 L485,387.8125 L270,387.8125 A0,0 0 0 0 270,387.8125 " fill="#FBFB77" filter="url(#f1wii9l5jepj0)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M485,387.8125 L485,397.8125 L495,397.8125 L485,387.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="204" x="276" y="404.8794">helm-list-el-package-source</text><!--MD5=[5553b9a1bd6fa98417769ef19c0d46a1]
+reverse link helm-source-in-buffer to helm-list-el-package-source--><path d="M120.5,268.3525 C120.5,280.4125 120.5,293.9625 120.5,307.6625 " fill="none" id="helm-source-in-buffer&lt;-helm-list-el-package-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="113.5,267.9825,120.5,247.9825,127.5,267.9825,113.5,267.9825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M120.5,159.8325 C120.5,173.3925 120.5,187.8525 120.5,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="113.5,159.8125,120.5,139.8125,127.5,159.8125,113.5,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7207b76e520088f4515815cc04857152]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-list-el-package-source'**\n\n
+"helm-source-in-buffer" <|- - "helm-list-el-package-source"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-list-el-package-source" {
+ __ some interesting slots __
+ init
+ action
+ action-transformer
+ candidate-number-limit
+ filtered-candidate-transformer
+ get-line
+ group
+ help-message
+ keymap
+ update
+}
+note right of "helm-list-el-package-source"
+ **helm-list-el-package-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-locate-override-inheritor.png b/doc/helm-figures/helm-locate-override-inheritor.png
new file mode 100644
index 00000000..a93568d6
--- /dev/null
+++ b/doc/helm-figures/helm-locate-override-inheritor.png
Binary files differ
diff --git a/doc/helm-figures/helm-locate-override-inheritor.svg b/doc/helm-figures/helm-locate-override-inheritor.svg
new file mode 100644
index 00000000..2003f57b
--- /dev/null
+++ b/doc/helm-figures/helm-locate-override-inheritor.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="485px" preserveAspectRatio="none" style="width:539px;height:485px;" version="1.1" viewBox="0 0 539 485" width="539px" zoomAndPan="magnify"><defs><filter height="300%" id="ffvf8tjrbtpv4" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="152.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="318" x="113.5" y="37.6611">'helm-locate-override-inheritor'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="275.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="275.5" y="79.5674"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#ffvf8tjrbtpv4)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="64" y="199.8125"/><ellipse cx="79" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M81.9688,221.4531 Q81.3906,221.75 80.75,221.8906 Q80.1094,222.0469 79.4063,222.0469 Q76.9063,222.0469 75.5781,220.4063 Q74.2656,218.75 74.2656,215.625 Q74.2656,212.5 75.5781,210.8438 Q76.9063,209.1875 79.4063,209.1875 Q80.1094,209.1875 80.75,209.3438 Q81.4063,209.5 81.9688,209.7969 L81.9688,212.5156 Q81.3438,211.9375 80.75,211.6719 Q80.1563,211.3906 79.5313,211.3906 Q78.1875,211.3906 77.5,212.4688 Q76.8125,213.5313 76.8125,215.625 Q76.8125,217.7188 77.5,218.7969 Q78.1875,219.8594 79.5313,219.8594 Q80.1563,219.8594 80.75,219.5938 Q81.3438,219.3125 81.9688,218.7344 L81.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="93" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="65" x2="193" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="65" x2="193" y1="239.8125" y2="239.8125"/><!--MD5=[2e3d3b2922e1daf59c103872c87a469e]
+class helm-locate-override-inheritor--><rect fill="#FEFECE" filter="url(#ffvf8tjrbtpv4)" height="59.207" id="helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="246" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="214" x="35" y="327.9668">helm-locate-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="251" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="65.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="65.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="192.5" x2="251" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#ffvf8tjrbtpv4)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="69.5" y="91.8125"/><ellipse cx="84.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M87.4688,113.4531 Q86.8906,113.75 86.25,113.8906 Q85.6094,114.0469 84.9063,114.0469 Q82.4063,114.0469 81.0781,112.4063 Q79.7656,110.75 79.7656,107.625 Q79.7656,104.5 81.0781,102.8438 Q82.4063,101.1875 84.9063,101.1875 Q85.6094,101.1875 86.25,101.3438 Q86.9063,101.5 87.4688,101.7969 L87.4688,104.5156 Q86.8438,103.9375 86.25,103.6719 Q85.6563,103.3906 85.0313,103.3906 Q83.6875,103.3906 83,104.4688 Q82.3125,105.5313 82.3125,107.625 Q82.3125,109.7188 83,110.7969 Q83.6875,111.8594 85.0313,111.8594 Q85.6563,111.8594 86.25,111.5938 Q86.8438,111.3125 87.4688,110.7344 L87.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="98.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="70.5" x2="187.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="70.5" x2="187.5" y1="131.8125" y2="131.8125"/><path d="M287,324.8125 L287,333.3125 L252.25,337.3125 L287,341.3125 L287,349.9453 A0,0 0 0 0 287,349.9453 L527,349.9453 A0,0 0 0 0 527,349.9453 L527,334.8125 L517,324.8125 L287,324.8125 A0,0 0 0 0 287,324.8125 " fill="#FBFB77" filter="url(#ffvf8tjrbtpv4)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M517,324.8125 L517,334.8125 L527,334.8125 L517,324.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="219" x="293" y="341.8794">helm-locate-override-inheritor</text><!--MD5=[78e52b23f8e756ae73535f85f4ae9d39]
+class helm-locate-source--><rect fill="#FEFECE" filter="url(#ffvf8tjrbtpv4)" height="48" id="helm-locate-source" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="45" y="426.8125"/><ellipse cx="60" cy="442.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M62.9688,448.4531 Q62.3906,448.75 61.75,448.8906 Q61.1094,449.0469 60.4063,449.0469 Q57.9063,449.0469 56.5781,447.4063 Q55.2656,445.75 55.2656,442.625 Q55.2656,439.5 56.5781,437.8438 Q57.9063,436.1875 60.4063,436.1875 Q61.1094,436.1875 61.75,436.3438 Q62.4063,436.5 62.9688,436.7969 L62.9688,439.5156 Q62.3438,438.9375 61.75,438.6719 Q61.1563,438.3906 60.5313,438.3906 Q59.1875,438.3906 58.5,439.4688 Q57.8125,440.5313 57.8125,442.625 Q57.8125,444.7188 58.5,445.7969 Q59.1875,446.8594 60.5313,446.8594 Q61.1563,446.8594 61.75,446.5938 Q62.3438,446.3125 62.9688,445.7344 L62.9688,448.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="74" y="446.9668">helm-locate-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="46" x2="212" y1="458.8125" y2="458.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="46" x2="212" y1="466.8125" y2="466.8125"/><!--MD5=[ea3943677655752665563907a8ed1189]
+reverse link helm-type-file to helm-locate-override-inheritor--><path d="M129,268.1125 C129,281.3925 129,295.6525 129,307.6925 " fill="none" id="helm-type-file&lt;-helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="122,267.9125,129,247.9125,136,267.9125,122,267.9125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M129,159.8325 C129,173.3925 129,187.8525 129,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="122,159.8125,129,139.8125,136,159.8125,122,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[59ec1b2dfc99414670695ca2c7ef7be5]
+reverse link helm-locate-override-inheritor to helm-locate-source--><path d="M129,387.0925 C129,400.9125 129,415.3025 129,426.8125 " fill="none" id="helm-locate-override-inheritor&lt;-helm-locate-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="122,387.0225,129,367.0225,136,387.0225,122,387.0225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[20c61314a8472416fad516e89db5e308]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-locate-override-inheritor'**\n\n
+"helm-type-file" <|- - "helm-locate-override-inheritor"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-locate-override-inheritor" {
+ __ some interesting slots __
+}
+note right of "helm-locate-override-inheritor"
+ **helm-locate-override-inheritor**
+end note
+"helm-locate-override-inheritor" <|- - "helm-locate-source"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-locate-source.png b/doc/helm-figures/helm-locate-source.png
new file mode 100644
index 00000000..9a3a4e48
--- /dev/null
+++ b/doc/helm-figures/helm-locate-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-locate-source.svg b/doc/helm-figures/helm-locate-source.svg
new file mode 100644
index 00000000..7ec43467
--- /dev/null
+++ b/doc/helm-figures/helm-locate-source.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="598px" preserveAspectRatio="none" style="width:501px;height:598px;" version="1.1" viewBox="0 0 501 598" width="501px" zoomAndPan="magnify"><defs><filter height="300%" id="fa2k6j1hche5w" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="133.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="205" x="151" y="37.6611">'helm-locate-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="256.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="256.5" y="79.5674"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#fa2k6j1hche5w)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="35" y="327.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="170" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="170" y1="347.8125" y2="347.8125"/><!--MD5=[78e52b23f8e756ae73535f85f4ae9d39]
+class helm-locate-source--><rect fill="#FEFECE" filter="url(#fa2k6j1hche5w)" height="172.0469" id="helm-locate-source" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="124.5" y="415.8125"/><ellipse cx="139.5" cy="431.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M142.4688,437.4531 Q141.8906,437.75 141.25,437.8906 Q140.6094,438.0469 139.9063,438.0469 Q137.4063,438.0469 136.0781,436.4063 Q134.7656,434.75 134.7656,431.625 Q134.7656,428.5 136.0781,426.8438 Q137.4063,425.1875 139.9063,425.1875 Q140.6094,425.1875 141.25,425.3438 Q141.9063,425.5 142.4688,425.7969 L142.4688,428.5156 Q141.8438,427.9375 141.25,427.6719 Q140.6563,427.3906 140.0313,427.3906 Q138.6875,427.3906 138,428.4688 Q137.3125,429.5313 137.3125,431.625 Q137.3125,433.7188 138,434.7969 Q138.6875,435.8594 140.0313,435.8594 Q140.6563,435.8594 141.25,435.5938 Q141.8438,435.3125 142.4688,434.7344 L142.4688,437.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="153.5" y="435.9668">helm-locate-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="125.5" x2="291.5" y1="447.8125" y2="447.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="130.5" y="478.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="130.5" y="491.6323">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="130.5" y="504.437">candidates-process</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="130.5" y="517.2417">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="130.5" y="530.0464">history</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="130.5" y="542.8511">multimatch</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="130.5" y="555.6558">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="52" x="130.5" y="568.4604">redisplay</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="130.5" y="581.2651">requires-pattern</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="125.5" x2="145" y1="462.2148" y2="462.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="145" y="465.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="272" x2="291.5" y1="462.2148" y2="462.2148"/><!--MD5=[2e3d3b2922e1daf59c103872c87a469e]
+class helm-locate-override-inheritor--><rect fill="#FEFECE" filter="url(#fa2k6j1hche5w)" height="48" id="helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="246" x="206.5" y="307.8125"/><ellipse cx="221.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M224.4688,329.4531 Q223.8906,329.75 223.25,329.8906 Q222.6094,330.0469 221.9063,330.0469 Q219.4063,330.0469 218.0781,328.4063 Q216.7656,326.75 216.7656,323.625 Q216.7656,320.5 218.0781,318.8438 Q219.4063,317.1875 221.9063,317.1875 Q222.6094,317.1875 223.25,317.3438 Q223.9063,317.5 224.4688,317.7969 L224.4688,320.5156 Q223.8438,319.9375 223.25,319.6719 Q222.6563,319.3906 222.0313,319.3906 Q220.6875,319.3906 220,320.4688 Q219.3125,321.5313 219.3125,323.625 Q219.3125,325.7188 220,326.7969 Q220.6875,327.8594 222.0313,327.8594 Q222.6563,327.8594 223.25,327.5938 Q223.8438,327.3125 224.4688,326.7344 L224.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="214" x="235.5" y="327.9668">helm-locate-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="207.5" x2="451.5" y1="339.8125" y2="339.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="207.5" x2="451.5" y1="347.8125" y2="347.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fa2k6j1hche5w)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="149" y="91.8125"/><ellipse cx="164" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M166.9688,113.4531 Q166.3906,113.75 165.75,113.8906 Q165.1094,114.0469 164.4063,114.0469 Q161.9063,114.0469 160.5781,112.4063 Q159.2656,110.75 159.2656,107.625 Q159.2656,104.5 160.5781,102.8438 Q161.9063,101.1875 164.4063,101.1875 Q165.1094,101.1875 165.75,101.3438 Q166.4063,101.5 166.9688,101.7969 L166.9688,104.5156 Q166.3438,103.9375 165.75,103.6719 Q165.1563,103.3906 164.5313,103.3906 Q163.1875,103.3906 162.5,104.4688 Q161.8125,105.5313 161.8125,107.625 Q161.8125,109.7188 162.5,110.7969 Q163.1875,111.8594 164.5313,111.8594 Q165.1563,111.8594 165.75,111.5938 Q166.3438,111.3125 166.9688,110.7344 L166.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="178" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="150" x2="267" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="150" x2="267" y1="131.8125" y2="131.8125"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#fa2k6j1hche5w)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="233.5" y="199.8125"/><ellipse cx="248.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M251.4688,221.4531 Q250.8906,221.75 250.25,221.8906 Q249.6094,222.0469 248.9063,222.0469 Q246.4063,222.0469 245.0781,220.4063 Q243.7656,218.75 243.7656,215.625 Q243.7656,212.5 245.0781,210.8438 Q246.4063,209.1875 248.9063,209.1875 Q249.6094,209.1875 250.25,209.3438 Q250.9063,209.5 251.4688,209.7969 L251.4688,212.5156 Q250.8438,211.9375 250.25,211.6719 Q249.6563,211.3906 249.0313,211.3906 Q247.6875,211.3906 247,212.4688 Q246.3125,213.5313 246.3125,215.625 Q246.3125,217.7188 247,218.7969 Q247.6875,219.8594 249.0313,219.8594 Q249.6563,219.8594 250.25,219.5938 Q250.8438,219.3125 251.4688,218.7344 L251.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="262.5" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="234.5" x2="362.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="234.5" x2="362.5" y1="239.8125" y2="239.8125"/><path d="M328,489.3125 L328,497.8125 L292.88,501.8125 L328,505.8125 L328,514.4453 A0,0 0 0 0 328,514.4453 L489,514.4453 A0,0 0 0 0 489,514.4453 L489,499.3125 L479,489.3125 L328,489.3125 A0,0 0 0 0 328,489.3125 " fill="#FBFB77" filter="url(#fa2k6j1hche5w)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M479,489.3125 L479,499.3125 L489,499.3125 L479,489.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="140" x="334" y="506.3794">helm-locate-source</text><!--MD5=[7d486a52fcabfa08acb8358ffa257dfe]
+reverse link helm-source-async to helm-locate-source--><path d="M116.63,372.1925 C125.96,385.2525 136.74,400.3425 147.56,415.4925 " fill="none" id="helm-source-async&lt;-helm-locate-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="110.86,376.1625,104.93,355.8225,122.25,368.0225,110.86,376.1625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[59ec1b2dfc99414670695ca2c7ef7be5]
+reverse link helm-locate-override-inheritor to helm-locate-source--><path d="M301.14,372.1925 C291.73,385.2525 280.86,400.3425 269.95,415.4925 " fill="none" id="helm-locate-override-inheritor&lt;-helm-locate-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="295.56,367.9625,312.93,355.8225,306.92,376.1425,295.56,367.9625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M185.55,157.7425 C160.63,202.1825 121.7,271.6125 101.55,307.5325 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="179.54,154.1425,195.43,140.1225,191.75,160.9925,179.54,154.1425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ea3943677655752665563907a8ed1189]
+reverse link helm-type-file to helm-locate-override-inheritor--><path d="M310.94,267.3525 C314.95,281.0425 319.23,295.7125 322.68,307.4925 " fill="none" id="helm-type-file&lt;-helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="304.12,268.9725,305.23,247.8125,317.56,265.0425,304.12,268.9725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M241.36,155.5125 C253.88,170.2625 267.76,186.6025 278.7,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="235.64,159.5925,228.03,139.8125,246.31,150.5325,235.64,159.5925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ee38d33a856755f75c78543a84219a4e]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-locate-source'**\n\n
+"helm-source-async" <|- - "helm-locate-source"
+"helm-locate-override-inheritor" <|- - "helm-locate-source"
+class "helm-source-async"
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-locate-override-inheritor"
+"helm-type-file" <|- - "helm-locate-override-inheritor"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-locate-source" {
+ __ some interesting slots __
+ init
+ candidate-number-limit
+ candidates-process
+ group
+ history
+ multimatch
+ persistent-action
+ redisplay
+ requires-pattern
+}
+note right of "helm-locate-source"
+ **helm-locate-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-locate-subdirs-source.png b/doc/helm-figures/helm-locate-subdirs-source.png
new file mode 100644
index 00000000..569f0913
--- /dev/null
+++ b/doc/helm-figures/helm-locate-subdirs-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-locate-subdirs-source.svg b/doc/helm-figures/helm-locate-subdirs-source.svg
new file mode 100644
index 00000000..7d1fdac5
--- /dev/null
+++ b/doc/helm-figures/helm-locate-subdirs-source.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="426px" preserveAspectRatio="none" style="width:500px;height:426px;" version="1.1" viewBox="0 0 500 426" width="500px" zoomAndPan="magnify"><defs><filter height="300%" id="f1q4522tgsb4mz" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="133.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="288" x="109.5" y="37.6611">'helm-locate-subdirs-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="256.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="256.5" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f1q4522tgsb4mz)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="26.5" y="199.8125"/><ellipse cx="41.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M44.4688,221.4531 Q43.8906,221.75 43.25,221.8906 Q42.6094,222.0469 41.9063,222.0469 Q39.4063,222.0469 38.0781,220.4063 Q36.7656,218.75 36.7656,215.625 Q36.7656,212.5 38.0781,210.8438 Q39.4063,209.1875 41.9063,209.1875 Q42.6094,209.1875 43.25,209.3438 Q43.9063,209.5 44.4688,209.7969 L44.4688,212.5156 Q43.8438,211.9375 43.25,211.6719 Q42.6563,211.3906 42.0313,211.3906 Q40.6875,211.3906 40,212.4688 Q39.3125,213.5313 39.3125,215.625 Q39.3125,217.7188 40,218.7969 Q40.6875,219.8594 42.0313,219.8594 Q42.6563,219.8594 43.25,219.5938 Q43.8438,219.3125 44.4688,218.7344 L44.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="55.5" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="27.5" x2="210.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="27.5" x2="210.5" y1="239.8125" y2="239.8125"/><!--MD5=[56407064ffc9bf78a0cd848588044ef4]
+class helm-locate-subdirs-source--><rect fill="#FEFECE" filter="url(#f1q4522tgsb4mz)" height="108.0234" id="helm-locate-subdirs-source" style="stroke: #A80036; stroke-width: 1.5;" width="226" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="194" x="35" y="327.9668">helm-locate-subdirs-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="231" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="12" y="370.8276">basedir</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="12" y="383.6323">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="396.437">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="36" x="12" y="409.2417">subdir</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="55.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="55.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="182.5" x2="231" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1q4522tgsb4mz)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="59.5" y="91.8125"/><ellipse cx="74.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M77.4688,113.4531 Q76.8906,113.75 76.25,113.8906 Q75.6094,114.0469 74.9063,114.0469 Q72.4063,114.0469 71.0781,112.4063 Q69.7656,110.75 69.7656,107.625 Q69.7656,104.5 71.0781,102.8438 Q72.4063,101.1875 74.9063,101.1875 Q75.6094,101.1875 76.25,101.3438 Q76.9063,101.5 77.4688,101.7969 L77.4688,104.5156 Q76.8438,103.9375 76.25,103.6719 Q75.6563,103.3906 75.0313,103.3906 Q73.6875,103.3906 73,104.4688 Q72.3125,105.5313 72.3125,107.625 Q72.3125,109.7188 73,110.7969 Q73.6875,111.8594 75.0313,111.8594 Q75.6563,111.8594 76.25,111.5938 Q76.8438,111.3125 77.4688,110.7344 L77.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="88.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="60.5" x2="177.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="60.5" x2="177.5" y1="131.8125" y2="131.8125"/><path d="M267.5,349.3125 L267.5,357.8125 L232.06,361.8125 L267.5,365.8125 L267.5,374.4453 A0,0 0 0 0 267.5,374.4453 L488.5,374.4453 A0,0 0 0 0 488.5,374.4453 L488.5,359.3125 L478.5,349.3125 L267.5,349.3125 A0,0 0 0 0 267.5,349.3125 " fill="#FBFB77" filter="url(#f1q4522tgsb4mz)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M478.5,349.3125 L478.5,359.3125 L488.5,359.3125 L478.5,349.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="273.5" y="366.3794">helm-locate-subdirs-source</text><!--MD5=[e807cc974173119fa99446f26fc88bc8]
+reverse link helm-source-in-buffer to helm-locate-subdirs-source--><path d="M119,268.0525 C119,280.6325 119,294.5225 119,307.6325 " fill="none" id="helm-source-in-buffer&lt;-helm-locate-subdirs-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="112,267.8825,119,247.8825,126,267.8825,112,267.8825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M119,159.8325 C119,173.3925 119,187.8525 119,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="112,159.8125,119,139.8125,126,159.8125,112,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4eb06dc0884b58d70330b754cafe45fa]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-locate-subdirs-source'**\n\n
+"helm-source-in-buffer" <|- - "helm-locate-subdirs-source"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-locate-subdirs-source" {
+ __ some interesting slots __
+ basedir
+ data
+ group
+ subdir
+}
+note right of "helm-locate-subdirs-source"
+ **helm-locate-subdirs-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-mac-spotlight-source.png b/doc/helm-figures/helm-mac-spotlight-source.png
new file mode 100644
index 00000000..3c3a19a3
--- /dev/null
+++ b/doc/helm-figures/helm-mac-spotlight-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-mac-spotlight-source.svg b/doc/helm-figures/helm-mac-spotlight-source.svg
new file mode 100644
index 00000000..32f069be
--- /dev/null
+++ b/doc/helm-figures/helm-mac-spotlight-source.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="414px" preserveAspectRatio="none" style="width:555px;height:414px;" version="1.1" viewBox="0 0 555 414" width="555px" zoomAndPan="magnify"><defs><filter height="300%" id="f7kms81sgyfzs" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="161" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="283" x="139.5" y="37.6611">'helm-mac-spotlight-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="284" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="284" y="79.5674"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#f7kms81sgyfzs)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="35" y="219.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="170" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="170" y1="239.8125" y2="239.8125"/><!--MD5=[acc538c4de58be324c7884953f9df4c3]
+class helm-mac-spotlight-source--><rect fill="#FEFECE" filter="url(#f7kms81sgyfzs)" height="95.2188" id="helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.5;" width="221" x="69" y="307.8125"/><ellipse cx="84" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M86.9688,329.4531 Q86.3906,329.75 85.75,329.8906 Q85.1094,330.0469 84.4063,330.0469 Q81.9063,330.0469 80.5781,328.4063 Q79.2656,326.75 79.2656,323.625 Q79.2656,320.5 80.5781,318.8438 Q81.9063,317.1875 84.4063,317.1875 Q85.1094,317.1875 85.75,317.3438 Q86.4063,317.5 86.9688,317.7969 L86.9688,320.5156 Q86.3438,319.9375 85.75,319.6719 Q85.1563,319.3906 84.5313,319.3906 Q83.1875,319.3906 82.5,320.4688 Q81.8125,321.5313 81.8125,323.625 Q81.8125,325.7188 82.5,326.7969 Q83.1875,327.8594 84.5313,327.8594 Q85.1563,327.8594 85.75,327.5938 Q86.3438,327.3125 86.9688,326.7344 L86.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="189" x="98" y="327.9668">helm-mac-spotlight-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="70" x2="289" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="75" y="370.8276">candidates-process</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="75" y="383.6323">multimatch</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="75" y="396.437">requires-pattern</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="70" x2="116" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="116" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="243" x2="289" y1="354.2148" y2="354.2148"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#f7kms81sgyfzs)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="206.5" y="199.8125"/><ellipse cx="221.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M224.4688,221.4531 Q223.8906,221.75 223.25,221.8906 Q222.6094,222.0469 221.9063,222.0469 Q219.4063,222.0469 218.0781,220.4063 Q216.7656,218.75 216.7656,215.625 Q216.7656,212.5 218.0781,210.8438 Q219.4063,209.1875 221.9063,209.1875 Q222.6094,209.1875 223.25,209.3438 Q223.9063,209.5 224.4688,209.7969 L224.4688,212.5156 Q223.8438,211.9375 223.25,211.6719 Q222.6563,211.3906 222.0313,211.3906 Q220.6875,211.3906 220,212.4688 Q219.3125,213.5313 219.3125,215.625 Q219.3125,217.7188 220,218.7969 Q220.6875,219.8594 222.0313,219.8594 Q222.6563,219.8594 223.25,219.5938 Q223.8438,219.3125 224.4688,218.7344 L224.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="235.5" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="207.5" x2="335.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="207.5" x2="335.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f7kms81sgyfzs)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="120" y="91.8125"/><ellipse cx="135" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M137.9688,113.4531 Q137.3906,113.75 136.75,113.8906 Q136.1094,114.0469 135.4063,114.0469 Q132.9063,114.0469 131.5781,112.4063 Q130.2656,110.75 130.2656,107.625 Q130.2656,104.5 131.5781,102.8438 Q132.9063,101.1875 135.4063,101.1875 Q136.1094,101.1875 136.75,101.3438 Q137.4063,101.5 137.9688,101.7969 L137.9688,104.5156 Q137.3438,103.9375 136.75,103.6719 Q136.1563,103.3906 135.5313,103.3906 Q134.1875,103.3906 133.5,104.4688 Q132.8125,105.5313 132.8125,107.625 Q132.8125,109.7188 133.5,110.7969 Q134.1875,111.8594 135.5313,111.8594 Q136.1563,111.8594 136.75,111.5938 Q137.3438,111.3125 137.9688,110.7344 L137.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="149" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="121" x2="238" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="121" x2="238" y1="131.8125" y2="131.8125"/><path d="M325.5,342.8125 L325.5,351.3125 L290.07,355.3125 L325.5,359.3125 L325.5,367.9453 A0,0 0 0 0 325.5,367.9453 L543.5,367.9453 A0,0 0 0 0 543.5,367.9453 L543.5,352.8125 L533.5,342.8125 L325.5,342.8125 A0,0 0 0 0 325.5,342.8125 " fill="#FBFB77" filter="url(#f7kms81sgyfzs)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M533.5,342.8125 L533.5,352.8125 L543.5,352.8125 L533.5,342.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="197" x="331.5" y="359.8794">helm-mac-spotlight-source</text><!--MD5=[4124b062e967a48c84822db18248b7ac]
+reverse link helm-source-async to helm-mac-spotlight-source--><path d="M116.48,264.6325 C126.06,278.2625 136.87,293.6425 146.79,307.7625 " fill="none" id="helm-source-async&lt;-helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="110.54,268.3525,104.77,247.9625,122,260.3025,110.54,268.3525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a474bc848475b2374c1d2bb84f271e9b]
+reverse link helm-type-file to helm-mac-spotlight-source--><path d="M243.21,264.6325 C233.52,278.2625 222.6,293.6425 212.57,307.7625 " fill="none" id="helm-type-file&lt;-helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="237.76,260.2125,255.05,247.9625,249.18,268.3225,237.76,260.2125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M146.68,155.0425 C133.92,169.9125 119.7,186.4625 108.52,199.4925 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="141.42,150.4325,159.75,139.8125,152.04,159.5525,141.42,150.4325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M212.68,155.0425 C225.58,169.9125 239.95,186.4625 251.26,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="207.29,159.5025,199.46,139.8125,217.86,150.3325,207.29,159.5025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[868f01375a2f44f0a567e0fe20e1a0a8]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-mac-spotlight-source'**\n\n
+"helm-source-async" <|- - "helm-mac-spotlight-source"
+"helm-type-file" <|- - "helm-mac-spotlight-source"
+class "helm-source-async"
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-mac-spotlight-source" {
+ __ some interesting slots __
+ candidates-process
+ multimatch
+ requires-pattern
+}
+note right of "helm-mac-spotlight-source"
+ **helm-mac-spotlight-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-moccur-class.png b/doc/helm-figures/helm-moccur-class.png
new file mode 100644
index 00000000..cc73acb6
--- /dev/null
+++ b/doc/helm-figures/helm-moccur-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-moccur-class.svg b/doc/helm-figures/helm-moccur-class.svg
new file mode 100644
index 00000000..7258b7ed
--- /dev/null
+++ b/doc/helm-figures/helm-moccur-class.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="401px" preserveAspectRatio="none" style="width:384px;height:401px;" version="1.1" viewBox="0 0 384 401" width="384px" zoomAndPan="magnify"><defs><filter height="300%" id="f10bmx5h08pill" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="75.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="95.5" y="37.6611">'helm-moccur-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="198.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="198.5" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f10bmx5h08pill)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="239.8125" y2="239.8125"/><!--MD5=[073c45925f2697dc8d5dd1a44a8a3365]
+class helm-moccur-class--><rect fill="#FEFECE" filter="url(#f10bmx5h08pill)" height="82.4141" id="helm-moccur-class" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="17.5" y="307.8125"/><ellipse cx="32.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M35.4688,329.4531 Q34.8906,329.75 34.25,329.8906 Q33.6094,330.0469 32.9063,330.0469 Q30.4063,330.0469 29.0781,328.4063 Q27.7656,326.75 27.7656,323.625 Q27.7656,320.5 29.0781,318.8438 Q30.4063,317.1875 32.9063,317.1875 Q33.6094,317.1875 34.25,317.3438 Q34.9063,317.5 35.4688,317.7969 L35.4688,320.5156 Q34.8438,319.9375 34.25,319.6719 Q33.6563,319.3906 33.0313,319.3906 Q31.6875,319.3906 31,320.4688 Q30.3125,321.5313 30.3125,323.625 Q30.3125,325.7188 31,326.7969 Q31.6875,327.8594 33.0313,327.8594 Q33.6563,327.8594 34.25,327.5938 Q34.8438,327.3125 35.4688,326.7344 L35.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="130" x="46.5" y="327.9668">helm-moccur-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="18.5" x2="178.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="70" x="23.5" y="370.8276">buffer-name</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="23.5" y="383.6323">moccur-buffers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="18.5" x2="35" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="35" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="162" x2="178.5" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f10bmx5h08pill)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="39" y="91.8125"/><ellipse cx="54" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.9688,113.4531 Q56.3906,113.75 55.75,113.8906 Q55.1094,114.0469 54.4063,114.0469 Q51.9063,114.0469 50.5781,112.4063 Q49.2656,110.75 49.2656,107.625 Q49.2656,104.5 50.5781,102.8438 Q51.9063,101.1875 54.4063,101.1875 Q55.1094,101.1875 55.75,101.3438 Q56.4063,101.5 56.9688,101.7969 L56.9688,104.5156 Q56.3438,103.9375 55.75,103.6719 Q55.1563,103.3906 54.5313,103.3906 Q53.1875,103.3906 52.5,104.4688 Q51.8125,105.5313 51.8125,107.625 Q51.8125,109.7188 52.5,110.7969 Q53.1875,111.8594 54.5313,111.8594 Q55.1563,111.8594 55.75,111.5938 Q56.3438,111.3125 56.9688,110.7344 L56.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="68" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="157" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="157" y1="131.8125" y2="131.8125"/><path d="M214.5,336.3125 L214.5,344.8125 L179.62,348.8125 L214.5,352.8125 L214.5,361.4453 A0,0 0 0 0 214.5,361.4453 L372.5,361.4453 A0,0 0 0 0 372.5,361.4453 L372.5,346.3125 L362.5,336.3125 L214.5,336.3125 A0,0 0 0 0 214.5,336.3125 " fill="#FBFB77" filter="url(#f10bmx5h08pill)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M362.5,336.3125 L362.5,346.3125 L372.5,346.3125 L362.5,336.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="137" x="220.5" y="353.3794">helm-moccur-class</text><!--MD5=[30ea2babd0fb514dd636adcbe39865ef]
+reverse link helm-source-in-buffer to helm-moccur-class--><path d="M98.5,268.4125 C98.5,281.0925 98.5,294.8725 98.5,307.3425 " fill="none" id="helm-source-in-buffer&lt;-helm-moccur-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91.5,267.9525,98.5,247.9525,105.5,267.9525,91.5,267.9525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M98.5,159.8325 C98.5,173.3925 98.5,187.8525 98.5,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91.5,159.8125,98.5,139.8125,105.5,159.8125,91.5,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[8f658504678477bfa832835507559706]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-moccur-class'**\n\n
+"helm-source-in-buffer" <|- - "helm-moccur-class"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-moccur-class" {
+ __ some interesting slots __
+ buffer-name
+ moccur-buffers
+}
+note right of "helm-moccur-class"
+ **helm-moccur-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-recentf-source.png b/doc/helm-figures/helm-recentf-source.png
new file mode 100644
index 00000000..ffac0635
--- /dev/null
+++ b/doc/helm-figures/helm-recentf-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-recentf-source.svg b/doc/helm-figures/helm-recentf-source.svg
new file mode 100644
index 00000000..ee126eba
--- /dev/null
+++ b/doc/helm-figures/helm-recentf-source.svg
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="478px" preserveAspectRatio="none" style="width:476px;height:478px;" version="1.1" viewBox="0 0 476 478" width="476px" zoomAndPan="magnify"><defs><filter height="300%" id="f7p2kaws9rkx" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="121.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="133" y="37.6611">'helm-recentf-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="244.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="244.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f7p2kaws9rkx)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[f9787a7e913788f0fbbca93390d6041a]
+class helm-recentf-source--><rect fill="#FEFECE" filter="url(#f7p2kaws9rkx)" height="159.2422" id="helm-recentf-source" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="85.5" y="307.8125"/><ellipse cx="100.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M103.4688,329.4531 Q102.8906,329.75 102.25,329.8906 Q101.6094,330.0469 100.9063,330.0469 Q98.4063,330.0469 97.0781,328.4063 Q95.7656,326.75 95.7656,323.625 Q95.7656,320.5 97.0781,318.8438 Q98.4063,317.1875 100.9063,317.1875 Q101.6094,317.1875 102.25,317.3438 Q102.9063,317.5 103.4688,317.7969 L103.4688,320.5156 Q102.8438,319.9375 102.25,319.6719 Q101.6563,319.3906 101.0313,319.3906 Q99.6875,319.3906 99,320.4688 Q98.3125,321.5313 98.3125,323.625 Q98.3125,325.7188 99,326.7969 Q99.6875,327.8594 101.0313,327.8594 Q101.6563,327.8594 102.25,327.5938 Q102.8438,327.3125 103.4688,326.7344 L103.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="114.5" y="327.9668">helm-recentf-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="86.5" x2="259.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="91.5" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="91.5" y="383.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="91.5" y="396.437">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="91.5" y="409.2417">match-part</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="91.5" y="422.0464">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="91.5" y="434.8511">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="91.5" y="447.6558">pattern-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="91.5" y="460.4604">persistent-action</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="86.5" x2="109.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="109.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="236.5" x2="259.5" y1="354.2148" y2="354.2148"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#f7p2kaws9rkx)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="197" y="199.8125"/><ellipse cx="212" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M214.9688,221.4531 Q214.3906,221.75 213.75,221.8906 Q213.1094,222.0469 212.4063,222.0469 Q209.9063,222.0469 208.5781,220.4063 Q207.2656,218.75 207.2656,215.625 Q207.2656,212.5 208.5781,210.8438 Q209.9063,209.1875 212.4063,209.1875 Q213.1094,209.1875 213.75,209.3438 Q214.4063,209.5 214.9688,209.7969 L214.9688,212.5156 Q214.3438,211.9375 213.75,211.6719 Q213.1563,211.3906 212.5313,211.3906 Q211.1875,211.3906 210.5,212.4688 Q209.8125,213.5313 209.8125,215.625 Q209.8125,217.7188 210.5,218.7969 Q211.1875,219.8594 212.5313,219.8594 Q213.1563,219.8594 213.75,219.5938 Q214.3438,219.3125 214.9688,218.7344 L214.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="226" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198" x2="326" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198" x2="326" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f7p2kaws9rkx)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="113.5" y="91.8125"/><ellipse cx="128.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M131.4688,113.4531 Q130.8906,113.75 130.25,113.8906 Q129.6094,114.0469 128.9063,114.0469 Q126.4063,114.0469 125.0781,112.4063 Q123.7656,110.75 123.7656,107.625 Q123.7656,104.5 125.0781,102.8438 Q126.4063,101.1875 128.9063,101.1875 Q129.6094,101.1875 130.25,101.3438 Q130.9063,101.5 131.4688,101.7969 L131.4688,104.5156 Q130.8438,103.9375 130.25,103.6719 Q129.6563,103.3906 129.0313,103.3906 Q127.6875,103.3906 127,104.4688 Q126.3125,105.5313 126.3125,107.625 Q126.3125,109.7188 127,110.7969 Q127.6875,111.8594 129.0313,111.8594 Q129.6563,111.8594 130.25,111.5938 Q130.8438,111.3125 131.4688,110.7344 L131.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="142.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="114.5" x2="231.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="114.5" x2="231.5" y1="131.8125" y2="131.8125"/><path d="M295.5,374.8125 L295.5,383.3125 L260.73,387.3125 L295.5,391.3125 L295.5,399.9453 A0,0 0 0 0 295.5,399.9453 L464.5,399.9453 A0,0 0 0 0 464.5,399.9453 L464.5,384.8125 L454.5,374.8125 L295.5,374.8125 A0,0 0 0 0 295.5,374.8125 " fill="#FBFB77" filter="url(#f7p2kaws9rkx)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M454.5,374.8125 L454.5,384.8125 L464.5,384.8125 L454.5,374.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="148" x="301.5" y="391.8794">helm-recentf-source</text><!--MD5=[c61a2677e41aced0f206eca3fb3deace]
+reverse link helm-source-sync to helm-recentf-source--><path d="M106.59,265.8025 C113.66,278.6325 121.71,293.2425 129.71,307.7525 " fill="none" id="helm-source-sync&lt;-helm-recentf-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="100.27,268.8425,96.75,247.9525,112.54,262.0925,100.27,268.8425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c214b1996ffa22e8ee90459314819dd7]
+reverse link helm-type-file to helm-recentf-source--><path d="M239.41,265.8025 C232.34,278.6325 224.29,293.2425 216.29,307.7525 " fill="none" id="helm-type-file&lt;-helm-recentf-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="233.46,262.0925,249.25,247.9525,245.73,268.8425,233.46,262.0925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M140.5,155.5125 C128.12,170.2625 114.4,186.6025 103.58,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="135.47,150.6325,153.69,139.8125,146.19,159.6325,135.47,150.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M205.5,155.5125 C217.88,170.2625 231.6,186.6025 242.42,199.4925 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="199.81,159.6325,192.31,139.8125,210.53,150.6325,199.81,159.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[62c1e9a5285faefa2bf0d92aa7967952]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-recentf-source'**\n\n
+"helm-source-sync" <|- - "helm-recentf-source"
+"helm-type-file" <|- - "helm-recentf-source"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-recentf-source" {
+ __ some interesting slots __
+ init
+ candidates
+ match-dynamic
+ match-part
+ match-strict
+ migemo
+ pattern-transformer
+ persistent-action
+}
+note right of "helm-recentf-source"
+ **helm-recentf-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-semantic-source.png b/doc/helm-figures/helm-semantic-source.png
new file mode 100644
index 00000000..eba623bf
--- /dev/null
+++ b/doc/helm-figures/helm-semantic-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-semantic-source.svg b/doc/helm-figures/helm-semantic-source.svg
new file mode 100644
index 00000000..205f478c
--- /dev/null
+++ b/doc/helm-figures/helm-semantic-source.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="465px" preserveAspectRatio="none" style="width:424px;height:465px;" version="1.1" viewBox="0 0 424 465" width="424px" zoomAndPan="magnify"><defs><filter height="300%" id="f12a039m40yjju" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="95.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="235" x="98" y="37.6611">'helm-semantic-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="218.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="218.5" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f12a039m40yjju)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="7.5" y="199.8125"/><ellipse cx="22.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M25.4688,221.4531 Q24.8906,221.75 24.25,221.8906 Q23.6094,222.0469 22.9063,222.0469 Q20.4063,222.0469 19.0781,220.4063 Q17.7656,218.75 17.7656,215.625 Q17.7656,212.5 19.0781,210.8438 Q20.4063,209.1875 22.9063,209.1875 Q23.6094,209.1875 24.25,209.3438 Q24.9063,209.5 25.4688,209.7969 L25.4688,212.5156 Q24.8438,211.9375 24.25,211.6719 Q23.6563,211.3906 23.0313,211.3906 Q21.6875,211.3906 21,212.4688 Q20.3125,213.5313 20.3125,215.625 Q20.3125,217.7188 21,218.7969 Q21.6875,219.8594 23.0313,219.8594 Q23.6563,219.8594 24.25,219.5938 Q24.8438,219.3125 25.4688,218.7344 L25.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="36.5" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="8.5" x2="191.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="8.5" x2="191.5" y1="239.8125" y2="239.8125"/><!--MD5=[6a7a1e548828873723640eef38a6053c]
+class helm-semantic-source--><rect fill="#FEFECE" filter="url(#f12a039m40yjju)" height="146.4375" id="helm-semantic-source" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="156" x="35" y="327.9668">helm-semantic-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="193" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="12" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="383.6323">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="12" y="396.437">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="409.2417">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="422.0464">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="12" y="434.8511">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="12" y="447.6558">persistent-help</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="36.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="36.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="163.5" x2="193" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f12a039m40yjju)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="40.5" y="91.8125"/><ellipse cx="55.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M58.4688,113.4531 Q57.8906,113.75 57.25,113.8906 Q56.6094,114.0469 55.9063,114.0469 Q53.4063,114.0469 52.0781,112.4063 Q50.7656,110.75 50.7656,107.625 Q50.7656,104.5 52.0781,102.8438 Q53.4063,101.1875 55.9063,101.1875 Q56.6094,101.1875 57.25,101.3438 Q57.9063,101.5 58.4688,101.7969 L58.4688,104.5156 Q57.8438,103.9375 57.25,103.6719 Q56.6563,103.3906 56.0313,103.3906 Q54.6875,103.3906 54,104.4688 Q53.3125,105.5313 53.3125,107.625 Q53.3125,109.7188 54,110.7969 Q54.6875,111.8594 56.0313,111.8594 Q56.6563,111.8594 57.25,111.5938 Q57.8438,111.3125 58.4688,110.7344 L58.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="69.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="41.5" x2="158.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="41.5" x2="158.5" y1="131.8125" y2="131.8125"/><path d="M229.5,368.3125 L229.5,376.8125 L194.1,380.8125 L229.5,384.8125 L229.5,393.4453 A0,0 0 0 0 229.5,393.4453 L412.5,393.4453 A0,0 0 0 0 412.5,393.4453 L412.5,378.3125 L402.5,368.3125 L229.5,368.3125 A0,0 0 0 0 229.5,368.3125 " fill="#FBFB77" filter="url(#f12a039m40yjju)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M402.5,368.3125 L402.5,378.3125 L412.5,378.3125 L402.5,368.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="162" x="235.5" y="385.3794">helm-semantic-source</text><!--MD5=[1ab4d17da5132a1e0f1c08a6c1bf0b9d]
+reverse link helm-source-in-buffer to helm-semantic-source--><path d="M100,268.2225 C100,280.5025 100,294.2025 100,307.6925 " fill="none" id="helm-source-in-buffer&lt;-helm-semantic-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="93,268.0225,100,248.0225,107,268.0225,93,268.0225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M100,159.8325 C100,173.3925 100,187.8525 100,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="93,159.8125,100,139.8125,107,159.8125,93,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1a1f1363a35d941e349019f8a552718a]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-semantic-source'**\n\n
+"helm-source-in-buffer" <|- - "helm-semantic-source"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-semantic-source" {
+ __ some interesting slots __
+ init
+ action
+ get-line
+ help-message
+ keymap
+ persistent-action
+ persistent-help
+}
+note right of "helm-semantic-source"
+ **helm-semantic-source**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-async.png b/doc/helm-figures/helm-source-async.png
new file mode 100644
index 00000000..4b89488b
--- /dev/null
+++ b/doc/helm-figures/helm-source-async.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-async.svg b/doc/helm-figures/helm-source-async.svg
new file mode 100644
index 00000000..c8cc5459
--- /dev/null
+++ b/doc/helm-figures/helm-source-async.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="447px" preserveAspectRatio="none" style="width:1167px;height:447px;" version="1.1" viewBox="0 0 1167 447" width="1167px" zoomAndPan="magnify"><defs><filter height="300%" id="f137s0e9njoo0n" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="467" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="202" x="486" y="37.6611">'helm-source-async'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="590" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="590" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="538" y="91.8125"/><ellipse cx="553" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M555.9688,113.4531 Q555.3906,113.75 554.75,113.8906 Q554.1094,114.0469 553.4063,114.0469 Q550.9063,114.0469 549.5781,112.4063 Q548.2656,110.75 548.2656,107.625 Q548.2656,104.5 549.5781,102.8438 Q550.9063,101.1875 553.4063,101.1875 Q554.1094,101.1875 554.75,101.3438 Q555.4063,101.5 555.9688,101.7969 L555.9688,104.5156 Q555.3438,103.9375 554.75,103.6719 Q554.1563,103.3906 553.5313,103.3906 Q552.1875,103.3906 551.5,104.4688 Q550.8125,105.5313 550.8125,107.625 Q550.8125,109.7188 551.5,110.7969 Q552.1875,111.8594 553.5313,111.8594 Q554.1563,111.8594 554.75,111.5938 Q555.3438,111.3125 555.9688,110.7344 L555.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="567" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="539" x2="656" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="539" x2="656" y1="131.8125" y2="131.8125"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="128.8281" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="515" y="199.8125"/><ellipse cx="530" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M532.9688,221.4531 Q532.3906,221.75 531.75,221.8906 Q531.1094,222.0469 530.4063,222.0469 Q527.9063,222.0469 526.5781,220.4063 Q525.2656,218.75 525.2656,215.625 Q525.2656,212.5 526.5781,210.8438 Q527.9063,209.1875 530.4063,209.1875 Q531.1094,209.1875 531.75,209.3438 Q532.4063,209.5 532.9688,209.7969 L532.9688,212.5156 Q532.3438,211.9375 531.75,211.6719 Q531.1563,211.3906 530.5313,211.3906 Q529.1875,211.3906 528.5,212.4688 Q527.8125,213.5313 527.8125,215.625 Q527.8125,217.7188 528.5,218.7969 Q529.1875,219.8594 530.5313,219.8594 Q531.1563,219.8594 531.75,219.5938 Q532.3438,219.3125 532.9688,218.7344 L532.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="544" y="219.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="516" x2="679" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="141" x="521" y="246.0229">Use this class to define a</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="126" x="521" y="258.8276">helm source calling an</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="99" x="521" y="271.6323">external process.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="516" x2="679" y1="278.2266" y2="278.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="516" x2="679" y1="280.2266" y2="280.2266"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="521" y="309.2417">candidates-process</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="521" y="322.0464">multimatch</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="516" x2="534" y1="292.6289" y2="292.6289"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="534" y="295.937">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="661" x2="679" y1="292.6289" y2="292.6289"/><path d="M715,228.8125 L715,260.3125 L680.38,264.3125 L715,268.3125 L715,299.3438 A0,0 0 0 0 715,299.3438 L896,299.3438 A0,0 0 0 0 896,299.3438 L896,238.8125 L886,228.8125 L715,228.8125 A0,0 0 0 0 715,228.8125 " fill="#FBFB77" filter="url(#f137s0e9njoo0n)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M886,228.8125 L886,238.8125 L896,238.8125 L886,228.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="137" x="721" y="245.8794">helm-source-async</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="858" y="245.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="160" x="721" y="261.0122">Use this class to define a</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="143" x="721" y="276.145">helm source calling an</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="110" x="721" y="291.2778">external process.</text><!--MD5=[acc538c4de58be324c7884953f9df4c3]
+class helm-mac-spotlight-source--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.5;" width="221" x="6" y="388.8125"/><ellipse cx="21" cy="404.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,410.4531 Q23.3906,410.75 22.75,410.8906 Q22.1094,411.0469 21.4063,411.0469 Q18.9063,411.0469 17.5781,409.4063 Q16.2656,407.75 16.2656,404.625 Q16.2656,401.5 17.5781,399.8438 Q18.9063,398.1875 21.4063,398.1875 Q22.1094,398.1875 22.75,398.3438 Q23.4063,398.5 23.9688,398.7969 L23.9688,401.5156 Q23.3438,400.9375 22.75,400.6719 Q22.1563,400.3906 21.5313,400.3906 Q20.1875,400.3906 19.5,401.4688 Q18.8125,402.5313 18.8125,404.625 Q18.8125,406.7188 19.5,407.7969 Q20.1875,408.8594 21.5313,408.8594 Q22.1563,408.8594 22.75,408.5938 Q23.3438,408.3125 23.9688,407.7344 L23.9688,410.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="189" x="35" y="408.9668">helm-mac-spotlight-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="226" y1="420.8125" y2="420.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="226" y1="428.8125" y2="428.8125"/><!--MD5=[d36bc6d3d79507f675f4471be5eaf52f]
+class helm-gid-source--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-gid-source" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="262.5" y="388.8125"/><ellipse cx="277.5" cy="404.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M280.4688,410.4531 Q279.8906,410.75 279.25,410.8906 Q278.6094,411.0469 277.9063,411.0469 Q275.4063,411.0469 274.0781,409.4063 Q272.7656,407.75 272.7656,404.625 Q272.7656,401.5 274.0781,399.8438 Q275.4063,398.1875 277.9063,398.1875 Q278.6094,398.1875 279.25,398.3438 Q279.9063,398.5 280.4688,398.7969 L280.4688,401.5156 Q279.8438,400.9375 279.25,400.6719 Q278.6563,400.3906 278.0313,400.3906 Q276.6875,400.3906 276,401.4688 Q275.3125,402.5313 275.3125,404.625 Q275.3125,406.7188 276,407.7969 Q276.6875,408.8594 278.0313,408.8594 Q278.6563,408.8594 279.25,408.5938 Q279.8438,408.3125 280.4688,407.7344 L280.4688,410.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="114" x="291.5" y="408.9668">helm-gid-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="263.5" x2="407.5" y1="420.8125" y2="420.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="263.5" x2="407.5" y1="428.8125" y2="428.8125"/><!--MD5=[bd2ea1af02554a0352e5fd98d33b66ab]
+class helm-fd-class--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-fd-class" style="stroke: #A80036; stroke-width: 1.5;" width="126" x="443.5" y="388.8125"/><ellipse cx="458.5" cy="404.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M461.4688,410.4531 Q460.8906,410.75 460.25,410.8906 Q459.6094,411.0469 458.9063,411.0469 Q456.4063,411.0469 455.0781,409.4063 Q453.7656,407.75 453.7656,404.625 Q453.7656,401.5 455.0781,399.8438 Q456.4063,398.1875 458.9063,398.1875 Q459.6094,398.1875 460.25,398.3438 Q460.9063,398.5 461.4688,398.7969 L461.4688,401.5156 Q460.8438,400.9375 460.25,400.6719 Q459.6563,400.3906 459.0313,400.3906 Q457.6875,400.3906 457,401.4688 Q456.3125,402.5313 456.3125,404.625 Q456.3125,406.7188 457,407.7969 Q457.6875,408.8594 459.0313,408.8594 Q459.6563,408.8594 460.25,408.5938 Q460.8438,408.3125 461.4688,407.7344 L461.4688,410.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="94" x="472.5" y="408.9668">helm-fd-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="444.5" x2="568.5" y1="420.8125" y2="420.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="444.5" x2="568.5" y1="428.8125" y2="428.8125"/><!--MD5=[78e52b23f8e756ae73535f85f4ae9d39]
+class helm-locate-source--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-locate-source" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="604.5" y="388.8125"/><ellipse cx="619.5" cy="404.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M622.4688,410.4531 Q621.8906,410.75 621.25,410.8906 Q620.6094,411.0469 619.9063,411.0469 Q617.4063,411.0469 616.0781,409.4063 Q614.7656,407.75 614.7656,404.625 Q614.7656,401.5 616.0781,399.8438 Q617.4063,398.1875 619.9063,398.1875 Q620.6094,398.1875 621.25,398.3438 Q621.9063,398.5 622.4688,398.7969 L622.4688,401.5156 Q621.8438,400.9375 621.25,400.6719 Q620.6563,400.3906 620.0313,400.3906 Q618.6875,400.3906 618,401.4688 Q617.3125,402.5313 617.3125,404.625 Q617.3125,406.7188 618,407.7969 Q618.6875,408.8594 620.0313,408.8594 Q620.6563,408.8594 621.25,408.5938 Q621.8438,408.3125 622.4688,407.7344 L622.4688,410.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="633.5" y="408.9668">helm-locate-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="605.5" x2="771.5" y1="420.8125" y2="420.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="605.5" x2="771.5" y1="428.8125" y2="428.8125"/><!--MD5=[48c627d917d22eb9e4865aed3bf653fb]
+class helm-grep-ag-class--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-grep-ag-class" style="stroke: #A80036; stroke-width: 1.5;" width="168" x="807.5" y="388.8125"/><ellipse cx="822.5" cy="404.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M825.4688,410.4531 Q824.8906,410.75 824.25,410.8906 Q823.6094,411.0469 822.9063,411.0469 Q820.4063,411.0469 819.0781,409.4063 Q817.7656,407.75 817.7656,404.625 Q817.7656,401.5 819.0781,399.8438 Q820.4063,398.1875 822.9063,398.1875 Q823.6094,398.1875 824.25,398.3438 Q824.9063,398.5 825.4688,398.7969 L825.4688,401.5156 Q824.8438,400.9375 824.25,400.6719 Q823.6563,400.3906 823.0313,400.3906 Q821.6875,400.3906 821,401.4688 Q820.3125,402.5313 820.3125,404.625 Q820.3125,406.7188 821,407.7969 Q821.6875,408.8594 823.0313,408.8594 Q823.6563,408.8594 824.25,408.5938 Q824.8438,408.3125 825.4688,407.7344 L825.4688,410.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="836.5" y="408.9668">helm-grep-ag-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="974.5" y1="420.8125" y2="420.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="808.5" x2="974.5" y1="428.8125" y2="428.8125"/><!--MD5=[91bb0adfdf7bf369d8d23bbe4e952f89]
+class helm-grep-class--><rect fill="#FEFECE" filter="url(#f137s0e9njoo0n)" height="48" id="helm-grep-class" style="stroke: #A80036; stroke-width: 1.5;" width="145" x="1011" y="388.8125"/><ellipse cx="1026" cy="404.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1028.9688,410.4531 Q1028.3906,410.75 1027.75,410.8906 Q1027.1094,411.0469 1026.4063,411.0469 Q1023.9063,411.0469 1022.5781,409.4063 Q1021.2656,407.75 1021.2656,404.625 Q1021.2656,401.5 1022.5781,399.8438 Q1023.9063,398.1875 1026.4063,398.1875 Q1027.1094,398.1875 1027.75,398.3438 Q1028.4063,398.5 1028.9688,398.7969 L1028.9688,401.5156 Q1028.3438,400.9375 1027.75,400.6719 Q1027.1563,400.3906 1026.5313,400.3906 Q1025.1875,400.3906 1024.5,401.4688 Q1023.8125,402.5313 1023.8125,404.625 Q1023.8125,406.7188 1024.5,407.7969 Q1025.1875,408.8594 1026.5313,408.8594 Q1027.1563,408.8594 1027.75,408.5938 Q1028.3438,408.3125 1028.9688,407.7344 L1028.9688,410.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="1040" y="408.9668">helm-grep-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1012" x2="1155" y1="420.8125" y2="420.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1012" x2="1155" y1="428.8125" y2="428.8125"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M597.5,160.4125 C597.5,172.7625 597.5,186.4725 597.5,199.7425 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="590.5,160.0225,597.5,140.0225,604.5,160.0225,590.5,160.0225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4124b062e967a48c84822db18248b7ac]
+reverse link helm-source-async to helm-mac-spotlight-source--><path d="M495.51,296.3725 C404.71,324.0325 273.95,363.8625 192.17,388.7625 " fill="none" id="helm-source-async&lt;-helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="493.64,289.6325,514.81,290.4925,497.72,303.0225,493.64,289.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b87e7a6cd6a876f20d8b301dfc1041b2]
+reverse link helm-source-async to helm-gid-source--><path d="M497.37,321.3025 C455.56,344.6825 409.31,370.5425 376.99,388.6125 " fill="none" id="helm-source-async&lt;-helm-gid-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="494.09,315.1125,514.96,311.4625,500.92,327.3325,494.09,315.1125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5fa17a1efdd398e28fa7575bea335940]
+reverse link helm-source-async to helm-fd-class--><path d="M547.03,346.5625 C537.47,361.9525 528.22,376.8525 520.96,388.5225 " fill="none" id="helm-source-async&lt;-helm-fd-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="541.35,342.4425,557.85,329.1425,553.24,349.8225,541.35,342.4425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7d486a52fcabfa08acb8358ffa257dfe]
+reverse link helm-source-async to helm-locate-source--><path d="M647.97,346.5625 C657.53,361.9525 666.78,376.8525 674.04,388.5225 " fill="none" id="helm-source-async&lt;-helm-locate-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="641.76,349.8225,637.15,329.1425,653.65,342.4425,641.76,349.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e220d22ad778b6230f0552c8a1eae9ee]
+reverse link helm-source-async to helm-grep-ag-class--><path d="M697.94,328.5625 C750.79,355.8525 795.53,374.7425 830.47,388.6525 " fill="none" id="helm-source-async&lt;-helm-grep-ag-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="694.56,334.6925,680.11,319.1925,701.07,322.3025,694.56,334.6925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[99faec0dbdb16852c37e6e30b1aacff5]
+reverse link helm-source-async to helm-grep-class--><path d="M698.96,328.3825 C825.93,377.2225 868.66,360.2225 993.5,388.8125 C999.16,390.1125 1005.01,391.4925 1010.88,392.9225 " fill="none" id="helm-source-async&lt;-helm-grep-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="696.04,334.7525,680.04,320.8725,701.21,321.7425,696.04,334.7525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[cbd82c46d814122f1e15098d2d5ebca2]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-async'**\n\n
+"helm-source" <|- - "helm-source-async"
+class "helm-source"
+class "helm-source-async" {
+ Use this class to define a
+ helm source calling an
+ external process.
+ ==
+ __ some interesting slots __
+ candidates-process
+ multimatch
+}
+note right of "helm-source-async"
+ **helm-source-async**:
+ Use this class to define a
+ helm source calling an
+ external process.
+end note
+"helm-source-async" <|- - "helm-mac-spotlight-source"
+"helm-source-async" <|- - "helm-gid-source"
+"helm-source-async" <|- - "helm-fd-class"
+"helm-source-async" <|- - "helm-locate-source"
+"helm-source-async" <|- - "helm-grep-ag-class"
+"helm-source-async" <|- - "helm-grep-class"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-basic-bookmarks.png b/doc/helm-figures/helm-source-basic-bookmarks.png
new file mode 100644
index 00000000..8608cdb2
--- /dev/null
+++ b/doc/helm-figures/helm-source-basic-bookmarks.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-basic-bookmarks.svg b/doc/helm-figures/helm-source-basic-bookmarks.svg
new file mode 100644
index 00000000..e1c20ed1
--- /dev/null
+++ b/doc/helm-figures/helm-source-basic-bookmarks.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="503px" preserveAspectRatio="none" style="width:619px;height:503px;" version="1.1" viewBox="0 0 619 503" width="619px" zoomAndPan="magnify"><defs><filter height="300%" id="fpc0u6r2kx4ng" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="192.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="314" x="155.5" y="37.6611">'helm-source-basic-bookmarks'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="315.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="315.5" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#fpc0u6r2kx4ng)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="239.8125" y2="239.8125"/><!--MD5=[bf73905ec5fe3c8fa1d96a26605c7c43]
+class helm-source-basic-bookmarks--><rect fill="#FEFECE" filter="url(#fpc0u6r2kx4ng)" height="184.8516" id="helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="244" x="84.5" y="307.8125"/><ellipse cx="99.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M102.4688,329.4531 Q101.8906,329.75 101.25,329.8906 Q100.6094,330.0469 99.9063,330.0469 Q97.4063,330.0469 96.0781,328.4063 Q94.7656,326.75 94.7656,323.625 Q94.7656,320.5 96.0781,318.8438 Q97.4063,317.1875 99.9063,317.1875 Q100.6094,317.1875 101.25,317.3438 Q101.9063,317.5 102.4688,317.7969 L102.4688,320.5156 Q101.8438,319.9375 101.25,319.6719 Q100.6563,319.3906 100.0313,319.3906 Q98.6875,319.3906 98,320.4688 Q97.3125,321.5313 97.3125,323.625 Q97.3125,325.7188 98,326.7969 Q98.6875,327.8594 100.0313,327.8594 Q100.6563,327.8594 101.25,327.5938 Q101.8438,327.3125 102.4688,326.7344 L102.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="212" x="113.5" y="327.9668">helm-source-basic-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="85.5" x2="327.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="90.5" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="90.5" y="383.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="90.5" y="396.437">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="90.5" y="409.2417">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="90.5" y="422.0464">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="90.5" y="434.8511">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="90.5" y="447.6558">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="90.5" y="460.4604">search</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="72" x="90.5" y="473.2651">search-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="90.5" y="486.0698">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="85.5" x2="143" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="143" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="270" x2="327.5" y1="354.2148" y2="354.2148"/><!--MD5=[257e0c9decabcf296fc5e077c0fe3da7]
+class helm-type-bookmark--><rect fill="#FEFECE" filter="url(#fpc0u6r2kx4ng)" height="48" id="helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="225.5" y="199.8125"/><ellipse cx="240.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M243.4688,221.4531 Q242.8906,221.75 242.25,221.8906 Q241.6094,222.0469 240.9063,222.0469 Q238.4063,222.0469 237.0781,220.4063 Q235.7656,218.75 235.7656,215.625 Q235.7656,212.5 237.0781,210.8438 Q238.4063,209.1875 240.9063,209.1875 Q241.6094,209.1875 242.25,209.3438 Q242.9063,209.5 243.4688,209.7969 L243.4688,212.5156 Q242.8438,211.9375 242.25,211.6719 Q241.6563,211.3906 241.0313,211.3906 Q239.6875,211.3906 239,212.4688 Q238.3125,213.5313 238.3125,215.625 Q238.3125,217.7188 239,218.7969 Q239.6875,219.8594 241.0313,219.8594 Q241.6563,219.8594 242.25,219.5938 Q242.8438,219.3125 243.4688,218.7344 L243.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="146" x="254.5" y="219.9668">helm-type-bookmark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="226.5" x2="402.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="226.5" x2="402.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fpc0u6r2kx4ng)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="147" y="91.8125"/><ellipse cx="162" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M164.9688,113.4531 Q164.3906,113.75 163.75,113.8906 Q163.1094,114.0469 162.4063,114.0469 Q159.9063,114.0469 158.5781,112.4063 Q157.2656,110.75 157.2656,107.625 Q157.2656,104.5 158.5781,102.8438 Q159.9063,101.1875 162.4063,101.1875 Q163.1094,101.1875 163.75,101.3438 Q164.4063,101.5 164.9688,101.7969 L164.9688,104.5156 Q164.3438,103.9375 163.75,103.6719 Q163.1563,103.3906 162.5313,103.3906 Q161.1875,103.3906 160.5,104.4688 Q159.8125,105.5313 159.8125,107.625 Q159.8125,109.7188 160.5,110.7969 Q161.1875,111.8594 162.5313,111.8594 Q163.1563,111.8594 163.75,111.5938 Q164.3438,111.3125 164.9688,110.7344 L164.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="176" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="148" x2="265" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="148" x2="265" y1="131.8125" y2="131.8125"/><path d="M364,387.8125 L364,396.3125 L328.56,400.3125 L364,404.3125 L364,412.9453 A0,0 0 0 0 364,412.9453 L607,412.9453 A0,0 0 0 0 607,412.9453 L607,397.8125 L597,387.8125 L364,387.8125 A0,0 0 0 0 364,387.8125 " fill="#FBFB77" filter="url(#fpc0u6r2kx4ng)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M597,387.8125 L597,397.8125 L607,397.8125 L597,387.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="222" x="370" y="404.8794">helm-source-basic-bookmarks</text><!--MD5=[560569eff9650cc936c24e2acd6b7c35]
+reverse link helm-source-in-buffer to helm-source-basic-bookmarks--><path d="M123.49,265.1925 C131.42,278.0125 140.55,292.7425 149.77,307.6625 " fill="none" id="helm-source-in-buffer&lt;-helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="117.41,268.6725,112.84,247.9825,129.32,261.3025,117.41,268.6725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[d74130942a07ed6c44229600fa80fecc]
+reverse link helm-type-bookmark to helm-source-basic-bookmarks--><path d="M289.51,265.1925 C281.58,278.0125 272.45,292.7425 263.23,307.6625 " fill="none" id="helm-type-bookmark&lt;-helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="283.68,261.3025,300.16,247.9825,295.59,268.6725,283.68,261.3025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M168.52,154.0925 C153.12,169.2025 135.82,186.1925 122.26,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="163.89,148.8225,183.07,139.8125,173.7,158.8225,163.89,148.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b3073f519ff1e7a9af7ffffd7406ad63]
+reverse link helm-source to helm-type-bookmark--><path d="M244.48,154.0925 C259.88,169.2025 277.18,186.1925 290.74,199.4925 " fill="none" id="helm-source&lt;-helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="239.3,158.8225,229.93,139.8125,249.11,148.8225,239.3,158.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[6a23b050d668cecb3462418c9809aca7]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-basic-bookmarks'**\n\n
+"helm-source-in-buffer" <|- - "helm-source-basic-bookmarks"
+"helm-type-bookmark" <|- - "helm-source-basic-bookmarks"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-bookmark"
+"helm-source" <|- - "helm-type-bookmark"
+class "helm-source"
+class "helm-source-basic-bookmarks" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filtered-candidate-transformer
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-source-basic-bookmarks"
+ **helm-source-basic-bookmarks**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-buffers.png b/doc/helm-figures/helm-source-buffers.png
new file mode 100644
index 00000000..090b0ff8
--- /dev/null
+++ b/doc/helm-figures/helm-source-buffers.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-buffers.svg b/doc/helm-figures/helm-source-buffers.svg
new file mode 100644
index 00000000..19f96f6b
--- /dev/null
+++ b/doc/helm-figures/helm-source-buffers.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="554px" preserveAspectRatio="none" style="width:483px;height:554px;" version="1.1" viewBox="0 0 483 554" width="483px" zoomAndPan="magnify"><defs><filter height="300%" id="f1klcjp3g0g6am" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="124.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="136" y="37.6611">'helm-source-buffers'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="247.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="247.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f1klcjp3g0g6am)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="35" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="161" y1="239.8125" y2="239.8125"/><!--MD5=[5e8ec52a80544584992cb03033476cca]
+class helm-source-buffers--><rect fill="#FEFECE" filter="url(#f1klcjp3g0g6am)" height="236.0703" id="helm-source-buffers" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="90.5" y="307.8125"/><ellipse cx="105.5" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M108.4688,329.4531 Q107.8906,329.75 107.25,329.8906 Q106.6094,330.0469 105.9063,330.0469 Q103.4063,330.0469 102.0781,328.4063 Q100.7656,326.75 100.7656,323.625 Q100.7656,320.5 102.0781,318.8438 Q103.4063,317.1875 105.9063,317.1875 Q106.6094,317.1875 107.25,317.3438 Q107.9063,317.5 108.4688,317.7969 L108.4688,320.5156 Q107.8438,319.9375 107.25,319.6719 Q106.6563,319.3906 106.0313,319.3906 Q104.6875,319.3906 104,320.4688 Q103.3125,321.5313 103.3125,323.625 Q103.3125,325.7188 104,326.7969 Q104.6875,327.8594 106.0313,327.8594 Q106.6563,327.8594 107.25,327.5938 Q107.8438,327.3125 108.4688,326.7344 L108.4688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="119.5" y="327.9668">helm-source-buffers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="91.5" x2="264.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="96.5" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="55" x="96.5" y="383.6323">buffer-list</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="96.5" y="396.437">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="96.5" y="409.2417">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="96.5" y="422.0464">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="96.5" y="434.8511">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="96.5" y="447.6558">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="96.5" y="460.4604">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="96.5" y="473.2651">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="96.5" y="486.0698">multimatch</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="96.5" y="498.8745">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="96.5" y="511.6792">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="96.5" y="524.4839">resume</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="96.5" y="537.2886">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="91.5" x2="114.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="114.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="241.5" x2="264.5" y1="354.2148" y2="354.2148"/><!--MD5=[44eb50c21698d944c3f7c5a7441762ef]
+class helm-type-buffer--><rect fill="#FEFECE" filter="url(#f1klcjp3g0g6am)" height="48" id="helm-type-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="197.5" y="199.8125"/><ellipse cx="212.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M215.4688,221.4531 Q214.8906,221.75 214.25,221.8906 Q213.6094,222.0469 212.9063,222.0469 Q210.4063,222.0469 209.0781,220.4063 Q207.7656,218.75 207.7656,215.625 Q207.7656,212.5 209.0781,210.8438 Q210.4063,209.1875 212.9063,209.1875 Q213.6094,209.1875 214.25,209.3438 Q214.9063,209.5 215.4688,209.7969 L215.4688,212.5156 Q214.8438,211.9375 214.25,211.6719 Q213.6563,211.3906 213.0313,211.3906 Q211.6875,211.3906 211,212.4688 Q210.3125,213.5313 210.3125,215.625 Q210.3125,217.7188 211,218.7969 Q211.6875,219.8594 213.0313,219.8594 Q213.6563,219.8594 214.25,219.5938 Q214.8438,219.3125 215.4688,218.7344 L215.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="226.5" y="219.9668">helm-type-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="347.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="347.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1klcjp3g0g6am)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="118.5" y="91.8125"/><ellipse cx="133.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M136.4688,113.4531 Q135.8906,113.75 135.25,113.8906 Q134.6094,114.0469 133.9063,114.0469 Q131.4063,114.0469 130.0781,112.4063 Q128.7656,110.75 128.7656,107.625 Q128.7656,104.5 130.0781,102.8438 Q131.4063,101.1875 133.9063,101.1875 Q134.6094,101.1875 135.25,101.3438 Q135.9063,101.5 136.4688,101.7969 L136.4688,104.5156 Q135.8438,103.9375 135.25,103.6719 Q134.6563,103.3906 134.0313,103.3906 Q132.6875,103.3906 132,104.4688 Q131.3125,105.5313 131.3125,107.625 Q131.3125,109.7188 132,110.7969 Q132.6875,111.8594 134.0313,111.8594 Q134.6563,111.8594 135.25,111.5938 Q135.8438,111.3125 136.4688,110.7344 L136.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="147.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="119.5" x2="236.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="119.5" x2="236.5" y1="131.8125" y2="131.8125"/><path d="M301,413.3125 L301,421.8125 L265.75,425.8125 L301,429.8125 L301,438.4453 A0,0 0 0 0 301,438.4453 L471,438.4453 A0,0 0 0 0 471,438.4453 L471,423.3125 L461,413.3125 L301,413.3125 A0,0 0 0 0 301,413.3125 " fill="#FBFB77" filter="url(#f1klcjp3g0g6am)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M461,413.3125 L461,423.3125 L471,423.3125 L461,413.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="149" x="307" y="430.3794">helm-source-buffers</text><!--MD5=[bd9832b2051106d13c2f652e2dc85e4c]
+reverse link helm-source-sync to helm-source-buffers--><path d="M103.53,266.3625 C109.32,278.6825 115.97,292.8225 122.85,307.4725 " fill="none" id="helm-source-sync&lt;-helm-source-buffers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="97.14,269.2225,94.97,248.1425,109.81,263.2725,97.14,269.2225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[88c02f9cf13fd6689df37b68aefeb8b8]
+reverse link helm-type-buffer to helm-source-buffers--><path d="M253.26,266.3625 C247.41,278.6825 240.69,292.8225 233.73,307.4725 " fill="none" id="helm-type-buffer&lt;-helm-source-buffers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="247.01,263.2125,261.92,248.1425,259.66,269.2125,247.01,263.2125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M144.1,155.0425 C130.91,169.9125 116.23,186.4625 104.68,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="139.1,150.1325,157.6,139.8125,149.57,159.4225,139.1,150.1325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[528fc0d38c023ea499a6c44f22caf734]
+reverse link helm-source to helm-type-buffer--><path d="M212.26,155.0425 C225.59,169.9125 240.42,186.4625 252.1,199.4925 " fill="none" id="helm-source&lt;-helm-type-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="206.75,159.3825,198.61,139.8125,217.17,150.0325,206.75,159.3825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[449031514833898d0eea19fadfdb5997]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-buffers'**\n\n
+"helm-source-sync" <|- - "helm-source-buffers"
+"helm-type-buffer" <|- - "helm-source-buffers"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-type-buffer"
+"helm-source" <|- - "helm-type-buffer"
+class "helm-source"
+class "helm-source-buffers" {
+ __ some interesting slots __
+ init
+ buffer-list
+ candidates
+ help-message
+ keymap
+ match
+ match-dynamic
+ match-strict
+ migemo
+ multimatch
+ nohighlight
+ persistent-action
+ resume
+ volatile
+}
+note right of "helm-source-buffers"
+ **helm-source-buffers**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-dummy.png b/doc/helm-figures/helm-source-dummy.png
new file mode 100644
index 00000000..25bc7e63
--- /dev/null
+++ b/doc/helm-figures/helm-source-dummy.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-dummy.svg b/doc/helm-figures/helm-source-dummy.svg
new file mode 100644
index 00000000..d4148254
--- /dev/null
+++ b/doc/helm-figures/helm-source-dummy.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="344px" preserveAspectRatio="none" style="width:408px;height:344px;" version="1.1" viewBox="0 0 408 344" width="408px" zoomAndPan="magnify"><defs><filter height="300%" id="f1wsawkhhfwwzl" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="87.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="99" y="37.6611">'helm-source-dummy'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="210.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="210.5" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1wsawkhhfwwzl)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><!--MD5=[5adfb603e84a1ac071a064f5c8c4d8a3]
+class helm-source-dummy--><rect fill="#FEFECE" filter="url(#f1wsawkhhfwwzl)" height="133.6328" id="helm-source-dummy" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="199.8125"/><ellipse cx="25.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M28.4688,221.4531 Q27.8906,221.75 27.25,221.8906 Q26.6094,222.0469 25.9063,222.0469 Q23.4063,222.0469 22.0781,220.4063 Q20.7656,218.75 20.7656,215.625 Q20.7656,212.5 22.0781,210.8438 Q23.4063,209.1875 25.9063,209.1875 Q26.6094,209.1875 27.25,209.3438 Q27.9063,209.5 28.4688,209.7969 L28.4688,212.5156 Q27.8438,211.9375 27.25,211.6719 Q26.6563,211.3906 26.0313,211.3906 Q24.6875,211.3906 24,212.4688 Q23.3125,213.5313 23.3125,215.625 Q23.3125,217.7188 24,218.7969 Q24.6875,219.8594 26.0313,219.8594 Q26.6563,219.8594 27.25,219.5938 Q27.8438,219.3125 28.4688,218.7344 L28.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="142" x="40.5" y="219.9668">helm-source-dummy</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="76" x="12" y="262.8276">accept-empty</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="275.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="288.437">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="12" y="301.2417">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="12" y="314.0464">multimatch</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="12" y="326.8511">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="246.2148" y2="246.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="249.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="246.2148" y2="246.2148"/><path d="M225.5,254.3125 L225.5,262.8125 L190.36,266.8125 L225.5,270.8125 L225.5,279.4453 A0,0 0 0 0 225.5,279.4453 L396.5,279.4453 A0,0 0 0 0 396.5,279.4453 L396.5,264.3125 L386.5,254.3125 L225.5,254.3125 A0,0 0 0 0 225.5,254.3125 " fill="#FBFB77" filter="url(#f1wsawkhhfwwzl)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M386.5,254.3125 L386.5,264.3125 L396.5,264.3125 L386.5,254.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="150" x="231.5" y="271.3794">helm-source-dummy</text><!--MD5=[08cc1f31d63ae7c2a5398bb390fce2ff]
+reverse link helm-source to helm-source-dummy--><path d="M98,160.3625 C98,172.6425 98,186.2925 98,199.5925 " fill="none" id="helm-source&lt;-helm-source-dummy" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,160.0925,98,140.0925,105,160.0925,91,160.0925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[0824c5f47287e57936a9e4a4b2404911]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-dummy'**\n\n
+"helm-source" <|- - "helm-source-dummy"
+class "helm-source"
+class "helm-source-dummy" {
+ __ some interesting slots __
+ accept-empty
+ candidates
+ filtered-candidate-transformer
+ match
+ multimatch
+ volatile
+}
+note right of "helm-source-dummy"
+ **helm-source-dummy**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-ffiles.png b/doc/helm-figures/helm-source-ffiles.png
new file mode 100644
index 00000000..cf304c19
--- /dev/null
+++ b/doc/helm-figures/helm-source-ffiles.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-ffiles.svg b/doc/helm-figures/helm-source-ffiles.svg
new file mode 100644
index 00000000..dfd64b0c
--- /dev/null
+++ b/doc/helm-figures/helm-source-ffiles.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="644px" preserveAspectRatio="none" style="width:390px;height:644px;" version="1.1" viewBox="0 0 390 644" width="390px" zoomAndPan="magnify"><defs><filter height="300%" id="f18kavn37g7zw" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="78.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="194" x="101.5" y="37.6611">'helm-source-ffiles'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="201.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="201.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f18kavn37g7zw)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="20" y="199.8125"/><ellipse cx="35" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M37.9688,221.4531 Q37.3906,221.75 36.75,221.8906 Q36.1094,222.0469 35.4063,222.0469 Q32.9063,222.0469 31.5781,220.4063 Q30.2656,218.75 30.2656,215.625 Q30.2656,212.5 31.5781,210.8438 Q32.9063,209.1875 35.4063,209.1875 Q36.1094,209.1875 36.75,209.3438 Q37.4063,209.5 37.9688,209.7969 L37.9688,212.5156 Q37.3438,211.9375 36.75,211.6719 Q36.1563,211.3906 35.5313,211.3906 Q34.1875,211.3906 33.5,212.4688 Q32.8125,213.5313 32.8125,215.625 Q32.8125,217.7188 33.5,218.7969 Q34.1875,219.8594 35.5313,219.8594 Q36.1563,219.8594 36.75,219.5938 Q37.3438,219.3125 37.9688,218.7344 L37.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="49" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="21" x2="175" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="21" x2="175" y1="239.8125" y2="239.8125"/><!--MD5=[4700ddfab9e311ad1ae5061cdd5496ba]
+class helm-source-ffiles--><rect fill="#FEFECE" filter="url(#f18kavn37g7zw)" height="325.7031" id="helm-source-ffiles" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="6" y="307.8125"/><ellipse cx="32.25" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M35.2188,329.4531 Q34.6406,329.75 34,329.8906 Q33.3594,330.0469 32.6563,330.0469 Q30.1563,330.0469 28.8281,328.4063 Q27.5156,326.75 27.5156,323.625 Q27.5156,320.5 28.8281,318.8438 Q30.1563,317.1875 32.6563,317.1875 Q33.3594,317.1875 34,317.3438 Q34.6563,317.5 35.2188,317.7969 L35.2188,320.5156 Q34.5938,319.9375 34,319.6719 Q33.4063,319.3906 32.7813,319.3906 Q31.4375,319.3906 30.75,320.4688 Q30.0625,321.5313 30.0625,323.625 Q30.0625,325.7188 30.75,326.7969 Q31.4375,327.8594 32.7813,327.8594 Q33.4063,327.8594 34,327.5938 Q34.5938,327.3125 35.2188,326.7344 L35.2188,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="127" x="48.75" y="327.9668">helm-source-ffiles</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="189" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="12" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="383.6323">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="12" y="396.437">action-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="12" y="409.2417">after-init-hook</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="89" x="12" y="422.0464">before-init-hook</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="12" y="434.8511">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="447.6558">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="460.4604">cleanup</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="12" y="473.2651">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="12" y="486.0698">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="76" x="12" y="498.8745">header-name</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="511.6792">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="524.4839">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="12" y="537.2886">match-on-real</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="12" y="550.0933">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="56" x="12" y="562.8979">mode-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="575.7026">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="12" y="588.5073">persistent-action-if</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="12" y="601.312">persistent-help</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="12" y="614.1167">update</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="12" y="626.9214">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="34.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="34.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="161.5" x2="189" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f18kavn37g7zw)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="38.5" y="91.8125"/><ellipse cx="53.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.4688,113.4531 Q55.8906,113.75 55.25,113.8906 Q54.6094,114.0469 53.9063,114.0469 Q51.4063,114.0469 50.0781,112.4063 Q48.7656,110.75 48.7656,107.625 Q48.7656,104.5 50.0781,102.8438 Q51.4063,101.1875 53.9063,101.1875 Q54.6094,101.1875 55.25,101.3438 Q55.9063,101.5 56.4688,101.7969 L56.4688,104.5156 Q55.8438,103.9375 55.25,103.6719 Q54.6563,103.3906 54.0313,103.3906 Q52.6875,103.3906 52,104.4688 Q51.3125,105.5313 51.3125,107.625 Q51.3125,109.7188 52,110.7969 Q52.6875,111.8594 54.0313,111.8594 Q54.6563,111.8594 55.25,111.5938 Q55.8438,111.3125 56.4688,110.7344 L56.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="67.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39.5" x2="156.5" y1="131.8125" y2="131.8125"/><path d="M225.5,458.3125 L225.5,466.8125 L190.04,470.8125 L225.5,474.8125 L225.5,483.4453 A0,0 0 0 0 225.5,483.4453 L378.5,483.4453 A0,0 0 0 0 378.5,483.4453 L378.5,468.3125 L368.5,458.3125 L225.5,458.3125 A0,0 0 0 0 225.5,458.3125 " fill="#FBFB77" filter="url(#f18kavn37g7zw)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M368.5,458.3125 L368.5,468.3125 L378.5,468.3125 L368.5,458.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="132" x="231.5" y="475.3794">helm-source-ffiles</text><!--MD5=[016784bd64bc0242128ed351709a683a]
+reverse link helm-source-sync to helm-source-ffiles--><path d="M98,268.1725 C98,279.9425 98,293.4325 98,307.7125 " fill="none" id="helm-source-sync&lt;-helm-source-ffiles" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,267.8625,98,247.8625,105,267.8625,91,267.8625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M98,159.8325 C98,173.3925 98,187.8525 98,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91,159.8125,98,139.8125,105,159.8125,91,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7e406830ebea7a2408e31f70600fe4e1]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-ffiles'**\n\n
+"helm-source-sync" <|- - "helm-source-ffiles"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-source-ffiles" {
+ __ some interesting slots __
+ init
+ action
+ action-transformer
+ after-init-hook
+ before-init-hook
+ candidate-number-limit
+ candidates
+ cleanup
+ filtered-candidate-transformer
+ group
+ header-name
+ help-message
+ keymap
+ match-on-real
+ migemo
+ mode-line
+ nohighlight
+ persistent-action-if
+ persistent-help
+ update
+ volatile
+}
+note right of "helm-source-ffiles"
+ **helm-source-ffiles**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-filtered-bookmarks.png b/doc/helm-figures/helm-source-filtered-bookmarks.png
new file mode 100644
index 00000000..64cbe64c
--- /dev/null
+++ b/doc/helm-figures/helm-source-filtered-bookmarks.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-filtered-bookmarks.svg b/doc/helm-figures/helm-source-filtered-bookmarks.svg
new file mode 100644
index 00000000..792bddc0
--- /dev/null
+++ b/doc/helm-figures/helm-source-filtered-bookmarks.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="611px" preserveAspectRatio="none" style="width:641px;height:611px;" version="1.1" viewBox="0 0 641 611" width="641px" zoomAndPan="magnify"><defs><filter height="300%" id="f1xuqg4iwt23an" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="204" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="336" x="156" y="37.6611">'helm-source-filtered-bookmarks'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="327" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="327" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f1xuqg4iwt23an)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="239.8125" y2="239.8125"/><!--MD5=[1b5f639ef80bc5f44c8cc4600bf3e2e4]
+class helm-source-filtered-bookmarks--><rect fill="#FEFECE" filter="url(#f1xuqg4iwt23an)" height="184.8516" id="helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="259" x="77" y="307.8125"/><ellipse cx="92" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M94.9688,329.4531 Q94.3906,329.75 93.75,329.8906 Q93.1094,330.0469 92.4063,330.0469 Q89.9063,330.0469 88.5781,328.4063 Q87.2656,326.75 87.2656,323.625 Q87.2656,320.5 88.5781,318.8438 Q89.9063,317.1875 92.4063,317.1875 Q93.1094,317.1875 93.75,317.3438 Q94.4063,317.5 94.9688,317.7969 L94.9688,320.5156 Q94.3438,319.9375 93.75,319.6719 Q93.1563,319.3906 92.5313,319.3906 Q91.1875,319.3906 90.5,320.4688 Q89.8125,321.5313 89.8125,323.625 Q89.8125,325.7188 90.5,326.7969 Q91.1875,327.8594 92.5313,327.8594 Q93.1563,327.8594 93.75,327.5938 Q94.3438,327.3125 94.9688,326.7344 L94.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="227" x="106" y="327.9668">helm-source-filtered-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="78" x2="335" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="83" y="370.8276">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="83" y="383.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="83" y="396.437">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="83" y="409.2417">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="83" y="422.0464">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="83" y="434.8511">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="83" y="447.6558">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="83" y="460.4604">search</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="72" x="83" y="473.2651">search-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="83" y="486.0698">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="78" x2="143" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="143" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="270" x2="335" y1="354.2148" y2="354.2148"/><!--MD5=[257e0c9decabcf296fc5e077c0fe3da7]
+class helm-type-bookmark--><rect fill="#FEFECE" filter="url(#f1xuqg4iwt23an)" height="48" id="helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="225.5" y="199.8125"/><ellipse cx="240.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M243.4688,221.4531 Q242.8906,221.75 242.25,221.8906 Q241.6094,222.0469 240.9063,222.0469 Q238.4063,222.0469 237.0781,220.4063 Q235.7656,218.75 235.7656,215.625 Q235.7656,212.5 237.0781,210.8438 Q238.4063,209.1875 240.9063,209.1875 Q241.6094,209.1875 242.25,209.3438 Q242.9063,209.5 243.4688,209.7969 L243.4688,212.5156 Q242.8438,211.9375 242.25,211.6719 Q241.6563,211.3906 241.0313,211.3906 Q239.6875,211.3906 239,212.4688 Q238.3125,213.5313 238.3125,215.625 Q238.3125,217.7188 239,218.7969 Q239.6875,219.8594 241.0313,219.8594 Q241.6563,219.8594 242.25,219.5938 Q242.8438,219.3125 243.4688,218.7344 L243.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="146" x="254.5" y="219.9668">helm-type-bookmark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="226.5" x2="402.5" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="226.5" x2="402.5" y1="239.8125" y2="239.8125"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1xuqg4iwt23an)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="147" y="91.8125"/><ellipse cx="162" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M164.9688,113.4531 Q164.3906,113.75 163.75,113.8906 Q163.1094,114.0469 162.4063,114.0469 Q159.9063,114.0469 158.5781,112.4063 Q157.2656,110.75 157.2656,107.625 Q157.2656,104.5 158.5781,102.8438 Q159.9063,101.1875 162.4063,101.1875 Q163.1094,101.1875 163.75,101.3438 Q164.4063,101.5 164.9688,101.7969 L164.9688,104.5156 Q164.3438,103.9375 163.75,103.6719 Q163.1563,103.3906 162.5313,103.3906 Q161.1875,103.3906 160.5,104.4688 Q159.8125,105.5313 159.8125,107.625 Q159.8125,109.7188 160.5,110.7969 Q161.1875,111.8594 162.5313,111.8594 Q163.1563,111.8594 163.75,111.5938 Q164.3438,111.3125 164.9688,110.7344 L164.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="176" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="148" x2="265" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="148" x2="265" y1="131.8125" y2="131.8125"/><path d="M371.5,387.8125 L371.5,396.3125 L336.27,400.3125 L371.5,404.3125 L371.5,412.9453 A0,0 0 0 0 371.5,412.9453 L629.5,412.9453 A0,0 0 0 0 629.5,412.9453 L629.5,397.8125 L619.5,387.8125 L371.5,387.8125 A0,0 0 0 0 371.5,387.8125 " fill="#FBFB77" filter="url(#f1xuqg4iwt23an)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M619.5,387.8125 L619.5,397.8125 L629.5,397.8125 L619.5,387.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="237" x="377.5" y="404.8794">helm-source-filtered-bookmarks</text><!--MD5=[f325aa84e92746ce6f670c419a69be3e]
+class helm-bookmark-find-files-class--><rect fill="#FEFECE" filter="url(#f1xuqg4iwt23an)" height="48" id="helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.5;" width="249" x="82" y="552.8125"/><ellipse cx="97" cy="568.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M99.9688,574.4531 Q99.3906,574.75 98.75,574.8906 Q98.1094,575.0469 97.4063,575.0469 Q94.9063,575.0469 93.5781,573.4063 Q92.2656,571.75 92.2656,568.625 Q92.2656,565.5 93.5781,563.8438 Q94.9063,562.1875 97.4063,562.1875 Q98.1094,562.1875 98.75,562.3438 Q99.4063,562.5 99.9688,562.7969 L99.9688,565.5156 Q99.3438,564.9375 98.75,564.6719 Q98.1563,564.3906 97.5313,564.3906 Q96.1875,564.3906 95.5,565.4688 Q94.8125,566.5313 94.8125,568.625 Q94.8125,570.7188 95.5,571.7969 Q96.1875,572.8594 97.5313,572.8594 Q98.1563,572.8594 98.75,572.5938 Q99.3438,572.3125 99.9688,571.7344 L99.9688,574.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="217" x="111" y="572.9668">helm-bookmark-find-files-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="83" x2="330" y1="584.8125" y2="584.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="83" x2="330" y1="592.8125" y2="592.8125"/><!--MD5=[38d3222c9d6413d0e8be51642b02db5a]
+reverse link helm-source-in-buffer to helm-source-filtered-bookmarks--><path d="M123.49,265.1925 C131.42,278.0125 140.55,292.7425 149.77,307.6625 " fill="none" id="helm-source-in-buffer&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="117.41,268.6725,112.84,247.9825,129.32,261.3025,117.41,268.6725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[36bf56344c9fb562b92d13c27d56d2e6]
+reverse link helm-type-bookmark to helm-source-filtered-bookmarks--><path d="M289.51,265.1925 C281.58,278.0125 272.45,292.7425 263.23,307.6625 " fill="none" id="helm-type-bookmark&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="283.68,261.3025,300.16,247.9825,295.59,268.6725,283.68,261.3025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M168.52,154.0925 C153.12,169.2025 135.82,186.1925 122.26,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="163.89,148.8225,183.07,139.8125,173.7,158.8225,163.89,148.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b3073f519ff1e7a9af7ffffd7406ad63]
+reverse link helm-source to helm-type-bookmark--><path d="M244.48,154.0925 C259.88,169.2025 277.18,186.1925 290.74,199.4925 " fill="none" id="helm-source&lt;-helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="239.3,158.8225,229.93,139.8125,249.11,148.8225,239.3,158.8225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[97418b6d899cd58bad59cfd77e9ec07d]
+reverse link helm-source-filtered-bookmarks to helm-bookmark-find-files-class--><path d="M206.5,512.9425 C206.5,527.8625 206.5,541.7425 206.5,552.6425 " fill="none" id="helm-source-filtered-bookmarks&lt;-helm-bookmark-find-files-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="199.5,512.9025,206.5,492.9025,213.5,512.9025,199.5,512.9025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[14b8184b4095c9f3e39158d6b3f69e54]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-filtered-bookmarks'**\n\n
+"helm-source-in-buffer" <|- - "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|- - "helm-source-filtered-bookmarks"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-bookmark"
+"helm-source" <|- - "helm-type-bookmark"
+class "helm-source"
+class "helm-source-filtered-bookmarks" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filtered-candidate-transformer
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-source-filtered-bookmarks"
+ **helm-source-filtered-bookmarks**
+end note
+"helm-source-filtered-bookmarks" <|- - "helm-bookmark-find-files-class"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-in-buffer.png b/doc/helm-figures/helm-source-in-buffer.png
new file mode 100644
index 00000000..fa53fc6b
--- /dev/null
+++ b/doc/helm-figures/helm-source-in-buffer.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-in-buffer.svg b/doc/helm-figures/helm-source-in-buffer.svg
new file mode 100644
index 00000000..47c05d27
--- /dev/null
+++ b/doc/helm-figures/helm-source-in-buffer.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="536px" preserveAspectRatio="none" style="width:2328px;height:536px;" version="1.1" viewBox="0 0 2328 536" width="2328px" zoomAndPan="magnify"><defs><filter height="300%" id="f570iog4gags3" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="1047.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="232" x="1051.5" y="37.6611">'helm-source-in-buffer'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1170.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1170.5" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="1140.5" y="91.8125"/><ellipse cx="1155.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1158.4688,113.4531 Q1157.8906,113.75 1157.25,113.8906 Q1156.6094,114.0469 1155.9063,114.0469 Q1153.4063,114.0469 1152.0781,112.4063 Q1150.7656,110.75 1150.7656,107.625 Q1150.7656,104.5 1152.0781,102.8438 Q1153.4063,101.1875 1155.9063,101.1875 Q1156.6094,101.1875 1157.25,101.3438 Q1157.9063,101.5 1158.4688,101.7969 L1158.4688,104.5156 Q1157.8438,103.9375 1157.25,103.6719 Q1156.6563,103.3906 1156.0313,103.3906 Q1154.6875,103.3906 1154,104.4688 Q1153.3125,105.5313 1153.3125,107.625 Q1153.3125,109.7188 1154,110.7969 Q1154.6875,111.8594 1156.0313,111.8594 Q1156.6563,111.8594 1157.25,111.5938 Q1157.8438,111.3125 1158.4688,110.7344 L1158.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="1169.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1141.5" x2="1258.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1141.5" x2="1258.5" y1="131.8125" y2="131.8125"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="218.4609" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="1107.5" y="199.8125"/><ellipse cx="1122.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1125.4688,221.4531 Q1124.8906,221.75 1124.25,221.8906 Q1123.6094,222.0469 1122.9063,222.0469 Q1120.4063,222.0469 1119.0781,220.4063 Q1117.7656,218.75 1117.7656,215.625 Q1117.7656,212.5 1119.0781,210.8438 Q1120.4063,209.1875 1122.9063,209.1875 Q1123.6094,209.1875 1124.25,209.3438 Q1124.9063,209.5 1125.4688,209.7969 L1125.4688,212.5156 Q1124.8438,211.9375 1124.25,211.6719 Q1123.6563,211.3906 1123.0313,211.3906 Q1121.6875,211.3906 1121,212.4688 Q1120.3125,213.5313 1120.3125,215.625 Q1120.3125,217.7188 1121,218.7969 Q1121.6875,219.8594 1123.0313,219.8594 Q1123.6563,219.8594 1124.25,219.5938 Q1124.8438,219.3125 1125.4688,218.7344 L1125.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="1136.5" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1108.5" x2="1291.5" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="167" x="1113.5" y="246.0229">Use this source to make helm</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="154" x="1113.5" y="258.8276">sources storing candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="85" x="1113.5" y="271.6323">inside a buffer.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1108.5" x2="1291.5" y1="278.2266" y2="278.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1108.5" x2="1291.5" y1="280.2266" y2="280.2266"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="1113.5" y="309.2417">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="1113.5" y="322.0464">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="25" x="1113.5" y="334.8511">data</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="1113.5" y="347.6558">get-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="1113.5" y="360.4604">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="1113.5" y="373.2651">migemo</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="1113.5" y="386.0698">search</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="72" x="1113.5" y="398.8745">search-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="1113.5" y="411.6792">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1108.5" x2="1136.5" y1="292.6289" y2="292.6289"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="1136.5" y="295.937">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1263.5" x2="1291.5" y1="292.6289" y2="292.6289"/><path d="M1327.5,273.3125 L1327.5,304.8125 L1292.78,308.8125 L1327.5,312.8125 L1327.5,343.8438 A0,0 0 0 0 1327.5,343.8438 L1540.5,343.8438 A0,0 0 0 0 1540.5,343.8438 L1540.5,283.3125 L1530.5,273.3125 L1327.5,273.3125 A0,0 0 0 0 1327.5,273.3125 " fill="#FBFB77" filter="url(#f570iog4gags3)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1530.5,273.3125 L1530.5,283.3125 L1540.5,283.3125 L1530.5,273.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="159" x="1333.5" y="290.3794">helm-source-in-buffer</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="1492.5" y="290.3794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="192" x="1333.5" y="305.5122">Use this source to make helm</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="172" x="1333.5" y="320.645">sources storing candidates</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="1333.5" y="335.7778">inside a buffer.</text><!--MD5=[6a7a1e548828873723640eef38a6053c]
+class helm-semantic-source--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-semantic-source" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="6" y="477.8125"/><ellipse cx="21" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,499.4531 Q23.3906,499.75 22.75,499.8906 Q22.1094,500.0469 21.4063,500.0469 Q18.9063,500.0469 17.5781,498.4063 Q16.2656,496.75 16.2656,493.625 Q16.2656,490.5 17.5781,488.8438 Q18.9063,487.1875 21.4063,487.1875 Q22.1094,487.1875 22.75,487.3438 Q23.4063,487.5 23.9688,487.7969 L23.9688,490.5156 Q23.3438,489.9375 22.75,489.6719 Q22.1563,489.3906 21.5313,489.3906 Q20.1875,489.3906 19.5,490.4688 Q18.8125,491.5313 18.8125,493.625 Q18.8125,495.7188 19.5,496.7969 Q20.1875,497.8594 21.5313,497.8594 Q22.1563,497.8594 22.75,497.5938 Q23.3438,497.3125 23.9688,496.7344 L23.9688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="156" x="35" y="497.9668">helm-semantic-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="193" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="193" y1="517.8125" y2="517.8125"/><!--MD5=[11858bbdb8c329cf3bf1e5498cb0b794]
+class helm-file-cache--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-file-cache" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="229.5" y="477.8125"/><ellipse cx="244.5" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M247.4688,499.4531 Q246.8906,499.75 246.25,499.8906 Q245.6094,500.0469 244.9063,500.0469 Q242.4063,500.0469 241.0781,498.4063 Q239.7656,496.75 239.7656,493.625 Q239.7656,490.5 241.0781,488.8438 Q242.4063,487.1875 244.9063,487.1875 Q245.6094,487.1875 246.25,487.3438 Q246.9063,487.5 247.4688,487.7969 L247.4688,490.5156 Q246.8438,489.9375 246.25,489.6719 Q245.6563,489.3906 245.0313,489.3906 Q243.6875,489.3906 243,490.4688 Q242.3125,491.5313 242.3125,493.625 Q242.3125,495.7188 243,496.7969 Q243.6875,497.8594 245.0313,497.8594 Q245.6563,497.8594 246.25,497.5938 Q246.8438,497.3125 247.4688,496.7344 L247.4688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="107" x="258.5" y="497.9668">helm-file-cache</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="230.5" x2="367.5" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="230.5" x2="367.5" y1="517.8125" y2="517.8125"/><!--MD5=[cea65451dee1c19877355cf9a9f1c806]
+class helm-list-el-package-source--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-list-el-package-source" style="stroke: #A80036; stroke-width: 1.5;" width="229" x="403.5" y="477.8125"/><ellipse cx="418.5" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M421.4688,499.4531 Q420.8906,499.75 420.25,499.8906 Q419.6094,500.0469 418.9063,500.0469 Q416.4063,500.0469 415.0781,498.4063 Q413.7656,496.75 413.7656,493.625 Q413.7656,490.5 415.0781,488.8438 Q416.4063,487.1875 418.9063,487.1875 Q419.6094,487.1875 420.25,487.3438 Q420.9063,487.5 421.4688,487.7969 L421.4688,490.5156 Q420.8438,489.9375 420.25,489.6719 Q419.6563,489.3906 419.0313,489.3906 Q417.6875,489.3906 417,490.4688 Q416.3125,491.5313 416.3125,493.625 Q416.3125,495.7188 417,496.7969 Q417.6875,497.8594 419.0313,497.8594 Q419.6563,497.8594 420.25,497.5938 Q420.8438,497.3125 421.4688,496.7344 L421.4688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="197" x="432.5" y="497.9668">helm-list-el-package-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="404.5" x2="631.5" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="404.5" x2="631.5" y1="517.8125" y2="517.8125"/><!--MD5=[1b5f639ef80bc5f44c8cc4600bf3e2e4]
+class helm-source-filtered-bookmarks--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="259" x="667.5" y="477.8125"/><ellipse cx="682.5" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M685.4688,499.4531 Q684.8906,499.75 684.25,499.8906 Q683.6094,500.0469 682.9063,500.0469 Q680.4063,500.0469 679.0781,498.4063 Q677.7656,496.75 677.7656,493.625 Q677.7656,490.5 679.0781,488.8438 Q680.4063,487.1875 682.9063,487.1875 Q683.6094,487.1875 684.25,487.3438 Q684.9063,487.5 685.4688,487.7969 L685.4688,490.5156 Q684.8438,489.9375 684.25,489.6719 Q683.6563,489.3906 683.0313,489.3906 Q681.6875,489.3906 681,490.4688 Q680.3125,491.5313 680.3125,493.625 Q680.3125,495.7188 681,496.7969 Q681.6875,497.8594 683.0313,497.8594 Q683.6563,497.8594 684.25,497.5938 Q684.8438,497.3125 685.4688,496.7344 L685.4688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="227" x="696.5" y="497.9668">helm-source-filtered-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="668.5" x2="925.5" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="668.5" x2="925.5" y1="517.8125" y2="517.8125"/><!--MD5=[bf73905ec5fe3c8fa1d96a26605c7c43]
+class helm-source-basic-bookmarks--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="244" x="962" y="477.8125"/><ellipse cx="977" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M979.9688,499.4531 Q979.3906,499.75 978.75,499.8906 Q978.1094,500.0469 977.4063,500.0469 Q974.9063,500.0469 973.5781,498.4063 Q972.2656,496.75 972.2656,493.625 Q972.2656,490.5 973.5781,488.8438 Q974.9063,487.1875 977.4063,487.1875 Q978.1094,487.1875 978.75,487.3438 Q979.4063,487.5 979.9688,487.7969 L979.9688,490.5156 Q979.3438,489.9375 978.75,489.6719 Q978.1563,489.3906 977.5313,489.3906 Q976.1875,489.3906 975.5,490.4688 Q974.8125,491.5313 974.8125,493.625 Q974.8125,495.7188 975.5,496.7969 Q976.1875,497.8594 977.5313,497.8594 Q978.1563,497.8594 978.75,497.5938 Q979.3438,497.3125 979.9688,496.7344 L979.9688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="212" x="991" y="497.9668">helm-source-basic-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="963" x2="1205" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="963" x2="1205" y1="517.8125" y2="517.8125"/><!--MD5=[1d6ee517c209485192c7fd1a0dfbbf09]
+class helm-info-source--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-info-source" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="1241.5" y="477.8125"/><ellipse cx="1256.5" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1259.4688,499.4531 Q1258.8906,499.75 1258.25,499.8906 Q1257.6094,500.0469 1256.9063,500.0469 Q1254.4063,500.0469 1253.0781,498.4063 Q1251.7656,496.75 1251.7656,493.625 Q1251.7656,490.5 1253.0781,488.8438 Q1254.4063,487.1875 1256.9063,487.1875 Q1257.6094,487.1875 1258.25,487.3438 Q1258.9063,487.5 1259.4688,487.7969 L1259.4688,490.5156 Q1258.8438,489.9375 1258.25,489.6719 Q1257.6563,489.3906 1257.0313,489.3906 Q1255.6875,489.3906 1255,490.4688 Q1254.3125,491.5313 1254.3125,493.625 Q1254.3125,495.7188 1255,496.7969 Q1255.6875,497.8594 1257.0313,497.8594 Q1257.6563,497.8594 1258.25,497.5938 Q1258.8438,497.3125 1259.4688,496.7344 L1259.4688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="1270.5" y="497.9668">helm-info-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1242.5" x2="1391.5" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1242.5" x2="1391.5" y1="517.8125" y2="517.8125"/><!--MD5=[c55ffa29bbb752794a043d0ccea5fc00]
+class helm-browse-project-source--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.5;" width="232" x="1428" y="477.8125"/><ellipse cx="1443" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1445.9688,499.4531 Q1445.3906,499.75 1444.75,499.8906 Q1444.1094,500.0469 1443.4063,500.0469 Q1440.9063,500.0469 1439.5781,498.4063 Q1438.2656,496.75 1438.2656,493.625 Q1438.2656,490.5 1439.5781,488.8438 Q1440.9063,487.1875 1443.4063,487.1875 Q1444.1094,487.1875 1444.75,487.3438 Q1445.4063,487.5 1445.9688,487.7969 L1445.9688,490.5156 Q1445.3438,489.9375 1444.75,489.6719 Q1444.1563,489.3906 1443.5313,489.3906 Q1442.1875,489.3906 1441.5,490.4688 Q1440.8125,491.5313 1440.8125,493.625 Q1440.8125,495.7188 1441.5,496.7969 Q1442.1875,497.8594 1443.5313,497.8594 Q1444.1563,497.8594 1444.75,497.5938 Q1445.3438,497.3125 1445.9688,496.7344 L1445.9688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="200" x="1457" y="497.9668">helm-browse-project-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1429" x2="1659" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1429" x2="1659" y1="517.8125" y2="517.8125"/><!--MD5=[073c45925f2697dc8d5dd1a44a8a3365]
+class helm-moccur-class--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-moccur-class" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="1695" y="477.8125"/><ellipse cx="1710" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1712.9688,499.4531 Q1712.3906,499.75 1711.75,499.8906 Q1711.1094,500.0469 1710.4063,500.0469 Q1707.9063,500.0469 1706.5781,498.4063 Q1705.2656,496.75 1705.2656,493.625 Q1705.2656,490.5 1706.5781,488.8438 Q1707.9063,487.1875 1710.4063,487.1875 Q1711.1094,487.1875 1711.75,487.3438 Q1712.4063,487.5 1712.9688,487.7969 L1712.9688,490.5156 Q1712.3438,489.9375 1711.75,489.6719 Q1711.1563,489.3906 1710.5313,489.3906 Q1709.1875,489.3906 1708.5,490.4688 Q1707.8125,491.5313 1707.8125,493.625 Q1707.8125,495.7188 1708.5,496.7969 Q1709.1875,497.8594 1710.5313,497.8594 Q1711.1563,497.8594 1711.75,497.5938 Q1712.3438,497.3125 1712.9688,496.7344 L1712.9688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="130" x="1724" y="497.9668">helm-moccur-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1696" x2="1856" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1696" x2="1856" y1="517.8125" y2="517.8125"/><!--MD5=[56407064ffc9bf78a0cd848588044ef4]
+class helm-locate-subdirs-source--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-locate-subdirs-source" style="stroke: #A80036; stroke-width: 1.5;" width="226" x="1892" y="477.8125"/><ellipse cx="1907" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1909.9688,499.4531 Q1909.3906,499.75 1908.75,499.8906 Q1908.1094,500.0469 1907.4063,500.0469 Q1904.9063,500.0469 1903.5781,498.4063 Q1902.2656,496.75 1902.2656,493.625 Q1902.2656,490.5 1903.5781,488.8438 Q1904.9063,487.1875 1907.4063,487.1875 Q1908.1094,487.1875 1908.75,487.3438 Q1909.4063,487.5 1909.9688,487.7969 L1909.9688,490.5156 Q1909.3438,489.9375 1908.75,489.6719 Q1908.1563,489.3906 1907.5313,489.3906 Q1906.1875,489.3906 1905.5,490.4688 Q1904.8125,491.5313 1904.8125,493.625 Q1904.8125,495.7188 1905.5,496.7969 Q1906.1875,497.8594 1907.5313,497.8594 Q1908.1563,497.8594 1908.75,497.5938 Q1909.3438,497.3125 1909.9688,496.7344 L1909.9688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="194" x="1921" y="497.9668">helm-locate-subdirs-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1893" x2="2117" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1893" x2="2117" y1="517.8125" y2="517.8125"/><!--MD5=[2a25ce0fce2e5578c6c8a1e5bf210dba]
+class helm-source-in-file--><rect fill="#FEFECE" filter="url(#f570iog4gags3)" height="48" id="helm-source-in-file" style="stroke: #A80036; stroke-width: 1.5;" width="164" x="2153" y="477.8125"/><ellipse cx="2168" cy="493.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2170.9688,499.4531 Q2170.3906,499.75 2169.75,499.8906 Q2169.1094,500.0469 2168.4063,500.0469 Q2165.9063,500.0469 2164.5781,498.4063 Q2163.2656,496.75 2163.2656,493.625 Q2163.2656,490.5 2164.5781,488.8438 Q2165.9063,487.1875 2168.4063,487.1875 Q2169.1094,487.1875 2169.75,487.3438 Q2170.4063,487.5 2170.9688,487.7969 L2170.9688,490.5156 Q2170.3438,489.9375 2169.75,489.6719 Q2169.1563,489.3906 2168.5313,489.3906 Q2167.1875,489.3906 2166.5,490.4688 Q2165.8125,491.5313 2165.8125,493.625 Q2165.8125,495.7188 2166.5,496.7969 Q2167.1875,497.8594 2168.5313,497.8594 Q2169.1563,497.8594 2169.75,497.5938 Q2170.3438,497.3125 2170.9688,496.7344 L2170.9688,499.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="132" x="2182" y="497.9668">helm-source-in-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2154" x2="2316" y1="509.8125" y2="509.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2154" x2="2316" y1="517.8125" y2="517.8125"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M1200,160.0425 C1200,172.0425 1200,185.6225 1200,199.5725 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1193,159.8525,1200,139.8525,1207,159.8525,1193,159.8525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1ab4d17da5132a1e0f1c08a6c1bf0b9d]
+reverse link helm-source-in-buffer to helm-semantic-source--><path d="M1087.35,327.6825 C903.7,357.1125 528.47,418.4325 212,477.8125 C206.15,478.9125 200.13,480.0625 194.06,481.2525 " fill="none" id="helm-source-in-buffer&lt;-helm-semantic-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1086.33,320.7625,1107.19,324.5125,1088.54,334.5825,1086.33,320.7625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c3c98643be5ce25a89a8fc176b95e73f]
+reverse link helm-source-in-buffer to helm-file-cache--><path d="M1087.58,330.9925 C930.14,361.1025 635.29,419.1825 386,477.8125 C380.37,479.1325 374.56,480.5525 368.72,482.0225 " fill="none" id="helm-source-in-buffer&lt;-helm-file-cache" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1086.51,324.0625,1107.47,327.1925,1089.14,337.8125,1086.51,324.0625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5553b9a1bd6fa98417769ef19c0d46a1]
+reverse link helm-source-in-buffer to helm-list-el-package-source--><path d="M1087.78,341.2425 C950.73,379.6225 722.16,443.6325 600.34,477.7525 " fill="none" id="helm-source-in-buffer&lt;-helm-list-el-package-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1086.17,334.4225,1107.31,335.7725,1089.94,347.9025,1086.17,334.4225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[38d3222c9d6413d0e8be51642b02db5a]
+reverse link helm-source-in-buffer to helm-source-filtered-bookmarks--><path d="M1089.1,362.3725 C1009.28,400.2025 905.49,449.3925 845.55,477.8025 " fill="none" id="helm-source-in-buffer&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1086.22,355.9925,1107.29,353.7525,1092.22,368.6425,1086.22,355.9925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[560569eff9650cc936c24e2acd6b7c35]
+reverse link helm-source-in-buffer to helm-source-basic-bookmarks--><path d="M1123.92,435.0825 C1114.1,451.2525 1105.05,466.1525 1098.06,477.6725 " fill="none" id="helm-source-in-buffer&lt;-helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1118.01,431.3325,1134.37,417.8725,1129.97,438.6025,1118.01,431.3325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c6f34f9bfe3eab31f5a0ea3dc389c5d2]
+reverse link helm-source-in-buffer to helm-info-source--><path d="M1276.74,435.0825 C1286.64,451.2525 1295.77,466.1525 1302.82,477.6725 " fill="none" id="helm-source-in-buffer&lt;-helm-info-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1270.67,438.5825,1266.19,417.8725,1282.61,431.2725,1270.67,438.5825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bab36c04217b3237bb981b2ca6f1bcf5]
+reverse link helm-source-in-buffer to helm-browse-project-source--><path d="M1309.17,417.2925 C1309.45,417.4625 1309.72,417.6425 1310,417.8125 C1352.95,444.6525 1405.77,464.3425 1450.35,477.7825 " fill="none" id="helm-source-in-buffer&lt;-helm-browse-project-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1304.99,422.9125,1292.54,405.7625,1312.96,411.4025,1304.99,422.9125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[30ea2babd0fb514dd636adcbe39865ef]
+reverse link helm-source-in-buffer to helm-moccur-class--><path d="M1310.76,416.6825 C1462.25,489.3125 1521.49,446.7225 1678,477.8125 C1683.49,478.9025 1689.13,480.0825 1694.81,481.3025 " fill="none" id="helm-source-in-buffer&lt;-helm-moccur-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1307.61,422.9425,1292.82,407.7625,1313.85,410.4025,1307.61,422.9425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e807cc974173119fa99446f26fc88bc8]
+reverse link helm-source-in-buffer to helm-locate-subdirs-source--><path d="M1311.04,416.7325 C1542.86,521.4525 1631.31,443.3625 1875,477.8125 C1880.56,478.6025 1886.25,479.4425 1891.98,480.3325 " fill="none" id="helm-source-in-buffer&lt;-helm-locate-subdirs-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1307.81,422.9525,1292.62,408.1725,1313.71,410.2525,1307.81,422.9525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[573dc56a4a24525e354df005e91e161f]
+reverse link helm-source-in-buffer to helm-source-in-file--><path d="M1311.01,416.1425 C1507.65,490.9125 1959.81,451.1125 2136,477.8125 C2141.5,478.6425 2147.14,479.6225 2152.81,480.6925 " fill="none" id="helm-source-in-buffer&lt;-helm-source-in-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1308.27,422.5825,1292.51,408.4125,1313.66,409.6625,1308.27,422.5825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ff26ec0166c5f2718acbee039c8cc2e1]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-in-buffer'**\n\n
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-source-in-buffer" {
+ Use this source to make helm
+ sources storing candidates
+ inside a buffer.
+ ==
+ __ some interesting slots __
+ init
+ candidates
+ data
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-source-in-buffer"
+ **helm-source-in-buffer**:
+ Use this source to make helm
+ sources storing candidates
+ inside a buffer.
+end note
+"helm-source-in-buffer" <|- - "helm-semantic-source"
+"helm-source-in-buffer" <|- - "helm-file-cache"
+"helm-source-in-buffer" <|- - "helm-list-el-package-source"
+"helm-source-in-buffer" <|- - "helm-source-filtered-bookmarks"
+"helm-source-in-buffer" <|- - "helm-source-basic-bookmarks"
+"helm-source-in-buffer" <|- - "helm-info-source"
+"helm-source-in-buffer" <|- - "helm-browse-project-source"
+"helm-source-in-buffer" <|- - "helm-moccur-class"
+"helm-source-in-buffer" <|- - "helm-locate-subdirs-source"
+"helm-source-in-buffer" <|- - "helm-source-in-file"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-in-file.png b/doc/helm-figures/helm-source-in-file.png
new file mode 100644
index 00000000..72434c06
--- /dev/null
+++ b/doc/helm-figures/helm-source-in-file.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-in-file.svg b/doc/helm-figures/helm-source-in-file.svg
new file mode 100644
index 00000000..fd3c232d
--- /dev/null
+++ b/doc/helm-figures/helm-source-in-file.svg
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="460px" preserveAspectRatio="none" style="width:424px;height:460px;" version="1.1" viewBox="0 0 424 460" width="424px" zoomAndPan="magnify"><defs><filter height="300%" id="f5kzyhvfe01ya" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="95.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="201" x="115" y="37.6611">'helm-source-in-file'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="218.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="218.5" y="79.5674"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#f5kzyhvfe01ya)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="35" y="219.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="190" y1="239.8125" y2="239.8125"/><!--MD5=[2a25ce0fce2e5578c6c8a1e5bf210dba]
+class helm-source-in-file--><rect fill="#FEFECE" filter="url(#f5kzyhvfe01ya)" height="141.6328" id="helm-source-in-file" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="15.5" y="307.8125"/><ellipse cx="31.4" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M34.3688,329.4531 Q33.7906,329.75 33.15,329.8906 Q32.5094,330.0469 31.8063,330.0469 Q29.3063,330.0469 27.9781,328.4063 Q26.6656,326.75 26.6656,323.625 Q26.6656,320.5 27.9781,318.8438 Q29.3063,317.1875 31.8063,317.1875 Q32.5094,317.1875 33.15,317.3438 Q33.8063,317.5 34.3688,317.7969 L34.3688,320.5156 Q33.7438,319.9375 33.15,319.6719 Q32.5563,319.3906 31.9313,319.3906 Q30.5875,319.3906 29.9,320.4688 Q29.2125,321.5313 29.2125,323.625 Q29.2125,325.7188 29.9,326.7969 Q30.5875,327.8594 31.9313,327.8594 Q32.5563,327.8594 33.15,327.5938 Q33.7438,327.3125 34.3688,326.7344 L34.3688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="132" x="45.6" y="327.9668">helm-source-in-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="180.5" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="154" x="21.5" y="354.0229">The contents of the FILE will</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="140" x="21.5" y="366.8276">be used as candidates in</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="38" x="21.5" y="379.6323">buffer.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="16.5" x2="180.5" y1="386.2266" y2="386.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="16.5" x2="180.5" y1="388.2266" y2="388.2266"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="21.5" y="417.2417">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="83" x="21.5" y="430.0464">candidates-file</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="42" x="21.5" y="442.8511">get-line</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="16.5" x2="35" y1="400.6289" y2="400.6289"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="35" y="403.937">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="162" x2="180.5" y1="400.6289" y2="400.6289"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f5kzyhvfe01ya)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="39" y="91.8125"/><ellipse cx="54" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M56.9688,113.4531 Q56.3906,113.75 55.75,113.8906 Q55.1094,114.0469 54.4063,114.0469 Q51.9063,114.0469 50.5781,112.4063 Q49.2656,110.75 49.2656,107.625 Q49.2656,104.5 50.5781,102.8438 Q51.9063,101.1875 54.4063,101.1875 Q55.1094,101.1875 55.75,101.3438 Q56.4063,101.5 56.9688,101.7969 L56.9688,104.5156 Q56.3438,103.9375 55.75,103.6719 Q55.1563,103.3906 54.5313,103.3906 Q53.1875,103.3906 52.5,104.4688 Q51.8125,105.5313 51.8125,107.625 Q51.8125,109.7188 52.5,110.7969 Q53.1875,111.8594 54.5313,111.8594 Q55.1563,111.8594 55.75,111.5938 Q56.3438,111.3125 56.9688,110.7344 L56.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="68" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="157" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="40" x2="157" y1="131.8125" y2="131.8125"/><path d="M216.5,343.3125 L216.5,374.8125 L181.61,378.8125 L216.5,382.8125 L216.5,413.8438 A0,0 0 0 0 216.5,413.8438 L412.5,413.8438 A0,0 0 0 0 412.5,413.8438 L412.5,353.3125 L402.5,343.3125 L216.5,343.3125 A0,0 0 0 0 216.5,343.3125 " fill="#FBFB77" filter="url(#f5kzyhvfe01ya)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M402.5,343.3125 L402.5,353.3125 L412.5,353.3125 L402.5,343.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="222.5" y="360.3794">helm-source-in-file</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="358.5" y="360.3794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="175" x="222.5" y="375.5122">The contents of the FILE will</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="159" x="222.5" y="390.645">be used as candidates in</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="41" x="222.5" y="405.7778">buffer.</text><!--MD5=[573dc56a4a24525e354df005e91e161f]
+reverse link helm-source-in-buffer to helm-source-in-file--><path d="M98.5,268.2425 C98.5,280.5125 98.5,294.1725 98.5,307.5825 " fill="none" id="helm-source-in-buffer&lt;-helm-source-in-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91.5,268.0525,98.5,248.0525,105.5,268.0525,91.5,268.0525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M98.5,159.8325 C98.5,173.3925 98.5,187.8525 98.5,199.4925 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="91.5,159.8125,98.5,139.8125,105.5,159.8125,91.5,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[620af61ea4ca849a950d734ba6494c42]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-in-file'**\n\n
+"helm-source-in-buffer" <|- - "helm-source-in-file"
+class "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-in-buffer"
+class "helm-source"
+class "helm-source-in-file" {
+ The contents of the FILE will
+ be used as candidates in
+ buffer.
+ ==
+ __ some interesting slots __
+ init
+ candidates-file
+ get-line
+}
+note right of "helm-source-in-file"
+ **helm-source-in-file**:
+ The contents of the FILE will
+ be used as candidates in
+ buffer.
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-session-class.png b/doc/helm-figures/helm-source-session-class.png
new file mode 100644
index 00000000..72a7a99f
--- /dev/null
+++ b/doc/helm-figures/helm-source-session-class.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-session-class.svg b/doc/helm-figures/helm-source-session-class.svg
new file mode 100644
index 00000000..792a4bf9
--- /dev/null
+++ b/doc/helm-figures/helm-source-session-class.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="426px" preserveAspectRatio="none" style="width:486px;height:426px;" version="1.1" viewBox="0 0 486 426" width="486px" zoomAndPan="magnify"><defs><filter height="300%" id="f1el3d0bmhyfr0" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="126.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="277" x="108" y="37.6611">'helm-source-session-class'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="249.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="249.5" y="79.5674"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#f1el3d0bmhyfr0)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="38" y="199.8125"/><ellipse cx="53" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M55.9688,221.4531 Q55.3906,221.75 54.75,221.8906 Q54.1094,222.0469 53.4063,222.0469 Q50.9063,222.0469 49.5781,220.4063 Q48.2656,218.75 48.2656,215.625 Q48.2656,212.5 49.5781,210.8438 Q50.9063,209.1875 53.4063,209.1875 Q54.1094,209.1875 54.75,209.3438 Q55.4063,209.5 55.9688,209.7969 L55.9688,212.5156 Q55.3438,211.9375 54.75,211.6719 Q54.1563,211.3906 53.5313,211.3906 Q52.1875,211.3906 51.5,212.4688 Q50.8125,213.5313 50.8125,215.625 Q50.8125,217.7188 51.5,218.7969 Q52.1875,219.8594 53.5313,219.8594 Q54.1563,219.8594 54.75,219.5938 Q55.3438,219.3125 55.9688,218.7344 L55.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="67" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="39" x2="193" y1="231.8125" y2="231.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="39" x2="193" y1="239.8125" y2="239.8125"/><!--MD5=[47156fd6f6930ad01ab8c92c260b1066]
+class helm-source-session-class--><rect fill="#FEFECE" filter="url(#f1el3d0bmhyfr0)" height="108.0234" id="helm-source-session-class" style="stroke: #A80036; stroke-width: 1.5;" width="220" x="6" y="307.8125"/><ellipse cx="21" cy="323.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,329.4531 Q23.3906,329.75 22.75,329.8906 Q22.1094,330.0469 21.4063,330.0469 Q18.9063,330.0469 17.5781,328.4063 Q16.2656,326.75 16.2656,323.625 Q16.2656,320.5 17.5781,318.8438 Q18.9063,317.1875 21.4063,317.1875 Q22.1094,317.1875 22.75,317.3438 Q23.4063,317.5 23.9688,317.7969 L23.9688,320.5156 Q23.3438,319.9375 22.75,319.6719 Q22.1563,319.3906 21.5313,319.3906 Q20.1875,319.3906 19.5,320.4688 Q18.8125,321.5313 18.8125,323.625 Q18.8125,325.7188 19.5,326.7969 Q20.1875,327.8594 21.5313,327.8594 Q22.1563,327.8594 22.75,327.5938 Q23.3438,327.3125 23.9688,326.7344 L23.9688,329.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="188" x="35" y="327.9668">helm-source-session-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="225" y1="339.8125" y2="339.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="12" y="370.8276">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="12" y="383.6323">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="12" y="396.437">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="12" y="409.2417">keymap</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="52.5" y1="354.2148" y2="354.2148"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="52.5" y="357.5229">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="179.5" x2="225" y1="354.2148" y2="354.2148"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1el3d0bmhyfr0)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="56.5" y="91.8125"/><ellipse cx="71.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M74.4688,113.4531 Q73.8906,113.75 73.25,113.8906 Q72.6094,114.0469 71.9063,114.0469 Q69.4063,114.0469 68.0781,112.4063 Q66.7656,110.75 66.7656,107.625 Q66.7656,104.5 68.0781,102.8438 Q69.4063,101.1875 71.9063,101.1875 Q72.6094,101.1875 73.25,101.3438 Q73.9063,101.5 74.4688,101.7969 L74.4688,104.5156 Q73.8438,103.9375 73.25,103.6719 Q72.6563,103.3906 72.0313,103.3906 Q70.6875,103.3906 70,104.4688 Q69.3125,105.5313 69.3125,107.625 Q69.3125,109.7188 70,110.7969 Q70.6875,111.8594 72.0313,111.8594 Q72.6563,111.8594 73.25,111.5938 Q73.8438,111.3125 74.4688,110.7344 L74.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="85.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="57.5" x2="174.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="57.5" x2="174.5" y1="131.8125" y2="131.8125"/><path d="M261.5,349.3125 L261.5,357.8125 L226.25,361.8125 L261.5,365.8125 L261.5,374.4453 A0,0 0 0 0 261.5,374.4453 L474.5,374.4453 A0,0 0 0 0 474.5,374.4453 L474.5,359.3125 L464.5,349.3125 L261.5,349.3125 A0,0 0 0 0 261.5,349.3125 " fill="#FBFB77" filter="url(#f1el3d0bmhyfr0)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M464.5,349.3125 L464.5,359.3125 L474.5,359.3125 L464.5,349.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="192" x="267.5" y="366.3794">helm-source-session-class</text><!--MD5=[52d97fd4d153f2c53b55b3f398cc83b3]
+reverse link helm-source-sync to helm-source-session-class--><path d="M116,268.0525 C116,280.6325 116,294.5225 116,307.6325 " fill="none" id="helm-source-sync&lt;-helm-source-session-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="109,267.8825,116,247.8825,123,267.8825,109,267.8825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M116,159.8325 C116,173.3925 116,187.8525 116,199.4925 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="109,159.8125,116,139.8125,123,159.8125,109,159.8125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[94019577c49d9fd63ba82dd181fa04ee]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-session-class'**\n\n
+"helm-source-sync" <|- - "helm-source-session-class"
+class "helm-source-sync"
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-source-session-class" {
+ __ some interesting slots __
+ action
+ candidates
+ help-message
+ keymap
+}
+note right of "helm-source-session-class"
+ **helm-source-session-class**
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source-sync.png b/doc/helm-figures/helm-source-sync.png
new file mode 100644
index 00000000..243d7322
--- /dev/null
+++ b/doc/helm-figures/helm-source-sync.png
Binary files differ
diff --git a/doc/helm-figures/helm-source-sync.svg b/doc/helm-figures/helm-source-sync.svg
new file mode 100644
index 00000000..6b55b766
--- /dev/null
+++ b/doc/helm-figures/helm-source-sync.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="472px" preserveAspectRatio="none" style="width:2874px;height:472px;" version="1.1" viewBox="0 0 2874 472" width="2874px" zoomAndPan="magnify"><defs><filter height="300%" id="fr2saz3zqti4l" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="1321" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="190" x="1346" y="37.6611">'helm-source-sync'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1444" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1444" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="1465.5" y="91.8125"/><ellipse cx="1480.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1483.4688,113.4531 Q1482.8906,113.75 1482.25,113.8906 Q1481.6094,114.0469 1480.9063,114.0469 Q1478.4063,114.0469 1477.0781,112.4063 Q1475.7656,110.75 1475.7656,107.625 Q1475.7656,104.5 1477.0781,102.8438 Q1478.4063,101.1875 1480.9063,101.1875 Q1481.6094,101.1875 1482.25,101.3438 Q1482.9063,101.5 1483.4688,101.7969 L1483.4688,104.5156 Q1482.8438,103.9375 1482.25,103.6719 Q1481.6563,103.3906 1481.0313,103.3906 Q1479.6875,103.3906 1479,104.4688 Q1478.3125,105.5313 1478.3125,107.625 Q1478.3125,109.7188 1479,110.7969 Q1479.6875,111.8594 1481.0313,111.8594 Q1481.6563,111.8594 1482.25,111.5938 Q1482.8438,111.3125 1483.4688,110.7344 L1483.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="1494.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1466.5" x2="1583.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1466.5" x2="1583.5" y1="131.8125" y2="131.8125"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="154.4375" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="170" x="1440" y="199.8125"/><ellipse cx="1461.3" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1464.2688,221.4531 Q1463.6906,221.75 1463.05,221.8906 Q1462.4094,222.0469 1461.7063,222.0469 Q1459.2063,222.0469 1457.8781,220.4063 Q1456.5656,218.75 1456.5656,215.625 Q1456.5656,212.5 1457.8781,210.8438 Q1459.2063,209.1875 1461.7063,209.1875 Q1462.4094,209.1875 1463.05,209.3438 Q1463.7063,209.5 1464.2688,209.7969 L1464.2688,212.5156 Q1463.6438,211.9375 1463.05,211.6719 Q1462.4563,211.3906 1461.8313,211.3906 Q1460.4875,211.3906 1459.8,212.4688 Q1459.1125,213.5313 1459.1125,215.625 Q1459.1125,217.7188 1459.8,218.7969 Q1460.4875,219.8594 1461.8313,219.8594 Q1462.4563,219.8594 1463.05,219.5938 Q1463.6438,219.3125 1464.2688,218.7344 L1464.2688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="1476.7" y="219.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1441" x2="1609" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="158" x="1446" y="246.0229">Use this class to make helm</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="124" x="1446" y="258.8276">sources using a list of</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="1446" y="271.6323">candidates.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1441" x2="1609" y1="278.2266" y2="278.2266"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1441" x2="1609" y1="280.2266" y2="280.2266"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="1446" y="309.2417">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="1446" y="322.0464">match-dynamic</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="1446" y="334.8511">match-strict</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="46" x="1446" y="347.6558">migemo</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1441" x2="1461.5" y1="292.6289" y2="292.6289"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="1461.5" y="295.937">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1588.5" x2="1609" y1="292.6289" y2="292.6289"/><path d="M1645,241.3125 L1645,272.8125 L1610.03,276.8125 L1645,280.8125 L1645,311.8438 A0,0 0 0 0 1645,311.8438 L1847,311.8438 A0,0 0 0 0 1847,311.8438 L1847,251.3125 L1837,241.3125 L1645,241.3125 A0,0 0 0 0 1645,241.3125 " fill="#FBFB77" filter="url(#fr2saz3zqti4l)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1837,241.3125 L1837,251.3125 L1847,251.3125 L1837,241.3125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="128" x="1651" y="258.3794">helm-source-sync</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="1779" y="258.3794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="181" x="1651" y="273.5122">Use this class to make helm</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="138" x="1651" y="288.645">sources using a list of</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="74" x="1651" y="303.7778">candidates.</text><!--MD5=[47156fd6f6930ad01ab8c92c260b1066]
+class helm-source-session-class--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-source-session-class" style="stroke: #A80036; stroke-width: 1.5;" width="220" x="6" y="413.8125"/><ellipse cx="21" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,435.4531 Q23.3906,435.75 22.75,435.8906 Q22.1094,436.0469 21.4063,436.0469 Q18.9063,436.0469 17.5781,434.4063 Q16.2656,432.75 16.2656,429.625 Q16.2656,426.5 17.5781,424.8438 Q18.9063,423.1875 21.4063,423.1875 Q22.1094,423.1875 22.75,423.3438 Q23.4063,423.5 23.9688,423.7969 L23.9688,426.5156 Q23.3438,425.9375 22.75,425.6719 Q22.1563,425.3906 21.5313,425.3906 Q20.1875,425.3906 19.5,426.4688 Q18.8125,427.5313 18.8125,429.625 Q18.8125,431.7188 19.5,432.7969 Q20.1875,433.8594 21.5313,433.8594 Q22.1563,433.8594 22.75,433.5938 Q23.3438,433.3125 23.9688,432.7344 L23.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="188" x="35" y="433.9668">helm-source-session-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="225" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="225" y1="453.8125" y2="453.8125"/><!--MD5=[9c6bffcc58873ff705394a767f912448]
+class helm-files-dired-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.5;" width="196" x="261" y="413.8125"/><ellipse cx="276" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M278.9688,435.4531 Q278.3906,435.75 277.75,435.8906 Q277.1094,436.0469 276.4063,436.0469 Q273.9063,436.0469 272.5781,434.4063 Q271.2656,432.75 271.2656,429.625 Q271.2656,426.5 272.5781,424.8438 Q273.9063,423.1875 276.4063,423.1875 Q277.1094,423.1875 277.75,423.3438 Q278.4063,423.5 278.9688,423.7969 L278.9688,426.5156 Q278.3438,425.9375 277.75,425.6719 Q277.1563,425.3906 276.5313,425.3906 Q275.1875,425.3906 274.5,426.4688 Q273.8125,427.5313 273.8125,429.625 Q273.8125,431.7188 274.5,432.7969 Q275.1875,433.8594 276.5313,433.8594 Q277.1563,433.8594 277.75,433.5938 Q278.3438,433.3125 278.9688,432.7344 L278.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="290" y="433.9668">helm-files-dired-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="262" x2="456" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="262" x2="456" y1="453.8125" y2="453.8125"/><!--MD5=[a7554553637232b99c06721dc00b929c]
+class helm-imenu-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-imenu-source" style="stroke: #A80036; stroke-width: 1.5;" width="167" x="492.5" y="413.8125"/><ellipse cx="507.5" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M510.4688,435.4531 Q509.8906,435.75 509.25,435.8906 Q508.6094,436.0469 507.9063,436.0469 Q505.4063,436.0469 504.0781,434.4063 Q502.7656,432.75 502.7656,429.625 Q502.7656,426.5 504.0781,424.8438 Q505.4063,423.1875 507.9063,423.1875 Q508.6094,423.1875 509.25,423.3438 Q509.9063,423.5 510.4688,423.7969 L510.4688,426.5156 Q509.8438,425.9375 509.25,425.6719 Q508.6563,425.3906 508.0313,425.3906 Q506.6875,425.3906 506,426.4688 Q505.3125,427.5313 505.3125,429.625 Q505.3125,431.7188 506,432.7969 Q506.6875,433.8594 508.0313,433.8594 Q508.6563,433.8594 509.25,433.5938 Q509.8438,433.3125 510.4688,432.7344 L510.4688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="135" x="521.5" y="433.9668">helm-imenu-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="493.5" x2="658.5" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="493.5" x2="658.5" y1="453.8125" y2="453.8125"/><!--MD5=[b49d18483e901ae1bf6135ad896f4fad]
+class helm-files-in-current-dir-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.5;" width="253" x="694.5" y="413.8125"/><ellipse cx="709.5" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M712.4688,435.4531 Q711.8906,435.75 711.25,435.8906 Q710.6094,436.0469 709.9063,436.0469 Q707.4063,436.0469 706.0781,434.4063 Q704.7656,432.75 704.7656,429.625 Q704.7656,426.5 706.0781,424.8438 Q707.4063,423.1875 709.9063,423.1875 Q710.6094,423.1875 711.25,423.3438 Q711.9063,423.5 712.4688,423.7969 L712.4688,426.5156 Q711.8438,425.9375 711.25,425.6719 Q710.6563,425.3906 710.0313,425.3906 Q708.6875,425.3906 708,426.4688 Q707.3125,427.5313 707.3125,429.625 Q707.3125,431.7188 708,432.7969 Q708.6875,433.8594 710.0313,433.8594 Q710.6563,433.8594 711.25,433.5938 Q711.8438,433.3125 712.4688,432.7344 L712.4688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="221" x="723.5" y="433.9668">helm-files-in-current-dir-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="695.5" x2="946.5" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="695.5" x2="946.5" y1="453.8125" y2="453.8125"/><!--MD5=[f9787a7e913788f0fbbca93390d6041a]
+class helm-recentf-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-recentf-source" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="982.5" y="413.8125"/><ellipse cx="997.5" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1000.4688,435.4531 Q999.8906,435.75 999.25,435.8906 Q998.6094,436.0469 997.9063,436.0469 Q995.4063,436.0469 994.0781,434.4063 Q992.7656,432.75 992.7656,429.625 Q992.7656,426.5 994.0781,424.8438 Q995.4063,423.1875 997.9063,423.1875 Q998.6094,423.1875 999.25,423.3438 Q999.9063,423.5 1000.4688,423.7969 L1000.4688,426.5156 Q999.8438,425.9375 999.25,425.6719 Q998.6563,425.3906 998.0313,425.3906 Q996.6875,425.3906 996,426.4688 Q995.3125,427.5313 995.3125,429.625 Q995.3125,431.7188 996,432.7969 Q996.6875,433.8594 998.0313,433.8594 Q998.6563,433.8594 999.25,433.5938 Q999.8438,433.3125 1000.4688,432.7344 L1000.4688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="1011.5" y="433.9668">helm-recentf-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="983.5" x2="1156.5" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="983.5" x2="1156.5" y1="453.8125" y2="453.8125"/><!--MD5=[282aa25f9d306cf00c48aa2e4e60e732]
+class helm-eshell-history-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-eshell-history-source" style="stroke: #A80036; stroke-width: 1.5;" width="222" x="1193" y="413.8125"/><ellipse cx="1208" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1210.9688,435.4531 Q1210.3906,435.75 1209.75,435.8906 Q1209.1094,436.0469 1208.4063,436.0469 Q1205.9063,436.0469 1204.5781,434.4063 Q1203.2656,432.75 1203.2656,429.625 Q1203.2656,426.5 1204.5781,424.8438 Q1205.9063,423.1875 1208.4063,423.1875 Q1209.1094,423.1875 1209.75,423.3438 Q1210.4063,423.5 1210.9688,423.7969 L1210.9688,426.5156 Q1210.3438,425.9375 1209.75,425.6719 Q1209.1563,425.3906 1208.5313,425.3906 Q1207.1875,425.3906 1206.5,426.4688 Q1205.8125,427.5313 1205.8125,429.625 Q1205.8125,431.7188 1206.5,432.7969 Q1207.1875,433.8594 1208.5313,433.8594 Q1209.1563,433.8594 1209.75,433.5938 Q1210.3438,433.3125 1210.9688,432.7344 L1210.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="190" x="1222" y="433.9668">helm-eshell-history-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1194" x2="1414" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1194" x2="1414" y1="453.8125" y2="453.8125"/><!--MD5=[3960967beb69c61591e67bd0b8c5ae1c]
+class helm-esh-source--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-esh-source" style="stroke: #A80036; stroke-width: 1.5;" width="150" x="1450" y="413.8125"/><ellipse cx="1465" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1467.9688,435.4531 Q1467.3906,435.75 1466.75,435.8906 Q1466.1094,436.0469 1465.4063,436.0469 Q1462.9063,436.0469 1461.5781,434.4063 Q1460.2656,432.75 1460.2656,429.625 Q1460.2656,426.5 1461.5781,424.8438 Q1462.9063,423.1875 1465.4063,423.1875 Q1466.1094,423.1875 1466.75,423.3438 Q1467.4063,423.5 1467.9688,423.7969 L1467.9688,426.5156 Q1467.3438,425.9375 1466.75,425.6719 Q1466.1563,425.3906 1465.5313,425.3906 Q1464.1875,425.3906 1463.5,426.4688 Q1462.8125,427.5313 1462.8125,429.625 Q1462.8125,431.7188 1463.5,432.7969 Q1464.1875,433.8594 1465.5313,433.8594 Q1466.1563,433.8594 1466.75,433.5938 Q1467.3438,433.3125 1467.9688,432.7344 L1467.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="118" x="1479" y="433.9668">helm-esh-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1451" x2="1599" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1451" x2="1599" y1="453.8125" y2="453.8125"/><!--MD5=[75687e4369f49c6cba1a6ff12ff0e7fa]
+class helm-epa--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-epa" style="stroke: #A80036; stroke-width: 1.5;" width="98" x="1635" y="413.8125"/><ellipse cx="1650" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1652.9688,435.4531 Q1652.3906,435.75 1651.75,435.8906 Q1651.1094,436.0469 1650.4063,436.0469 Q1647.9063,436.0469 1646.5781,434.4063 Q1645.2656,432.75 1645.2656,429.625 Q1645.2656,426.5 1646.5781,424.8438 Q1647.9063,423.1875 1650.4063,423.1875 Q1651.1094,423.1875 1651.75,423.3438 Q1652.4063,423.5 1652.9688,423.7969 L1652.9688,426.5156 Q1652.3438,425.9375 1651.75,425.6719 Q1651.1563,425.3906 1650.5313,425.3906 Q1649.1875,425.3906 1648.5,426.4688 Q1647.8125,427.5313 1647.8125,429.625 Q1647.8125,431.7188 1648.5,432.7969 Q1649.1875,433.8594 1650.5313,433.8594 Q1651.1563,433.8594 1651.75,433.5938 Q1652.3438,433.3125 1652.9688,432.7344 L1652.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="66" x="1664" y="433.9668">helm-epa</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1636" x2="1732" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1636" x2="1732" y1="453.8125" y2="453.8125"/><!--MD5=[9bb915cdd04b5f6bf4c2c1633cbdfbdc]
+class helm-M-x-class--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-M-x-class" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="1768" y="413.8125"/><ellipse cx="1783" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1785.9688,435.4531 Q1785.3906,435.75 1784.75,435.8906 Q1784.1094,436.0469 1783.4063,436.0469 Q1780.9063,436.0469 1779.5781,434.4063 Q1778.2656,432.75 1778.2656,429.625 Q1778.2656,426.5 1779.5781,424.8438 Q1780.9063,423.1875 1783.4063,423.1875 Q1784.1094,423.1875 1784.75,423.3438 Q1785.4063,423.5 1785.9688,423.7969 L1785.9688,426.5156 Q1785.3438,425.9375 1784.75,425.6719 Q1784.1563,425.3906 1783.5313,425.3906 Q1782.1875,425.3906 1781.5,426.4688 Q1780.8125,427.5313 1780.8125,429.625 Q1780.8125,431.7188 1781.5,432.7969 Q1782.1875,433.8594 1783.5313,433.8594 Q1784.1563,433.8594 1784.75,433.5938 Q1785.3438,433.3125 1785.9688,432.7344 L1785.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="1797" y="433.9668">helm-M-x-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1769" x2="1903" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1769" x2="1903" y1="453.8125" y2="453.8125"/><!--MD5=[65c9e2a5e033ac2de329b35010304c74]
+class helm-idle-time-timers-class--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="224" x="1939" y="413.8125"/><ellipse cx="1954" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1956.9688,435.4531 Q1956.3906,435.75 1955.75,435.8906 Q1955.1094,436.0469 1954.4063,436.0469 Q1951.9063,436.0469 1950.5781,434.4063 Q1949.2656,432.75 1949.2656,429.625 Q1949.2656,426.5 1950.5781,424.8438 Q1951.9063,423.1875 1954.4063,423.1875 Q1955.1094,423.1875 1955.75,423.3438 Q1956.4063,423.5 1956.9688,423.7969 L1956.9688,426.5156 Q1956.3438,425.9375 1955.75,425.6719 Q1955.1563,425.3906 1954.5313,425.3906 Q1953.1875,425.3906 1952.5,426.4688 Q1951.8125,427.5313 1951.8125,429.625 Q1951.8125,431.7188 1952.5,432.7969 Q1953.1875,433.8594 1954.5313,433.8594 Q1955.1563,433.8594 1955.75,433.5938 Q1956.3438,433.3125 1956.9688,432.7344 L1956.9688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="192" x="1968" y="433.9668">helm-idle-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1940" x2="2162" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1940" x2="2162" y1="453.8125" y2="453.8125"/><!--MD5=[b0e60113aba2bebbe59d6cbba30a4a7f]
+class helm-absolute-time-timers-class--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="261" x="2198.5" y="413.8125"/><ellipse cx="2213.5" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2216.4688,435.4531 Q2215.8906,435.75 2215.25,435.8906 Q2214.6094,436.0469 2213.9063,436.0469 Q2211.4063,436.0469 2210.0781,434.4063 Q2208.7656,432.75 2208.7656,429.625 Q2208.7656,426.5 2210.0781,424.8438 Q2211.4063,423.1875 2213.9063,423.1875 Q2214.6094,423.1875 2215.25,423.3438 Q2215.9063,423.5 2216.4688,423.7969 L2216.4688,426.5156 Q2215.8438,425.9375 2215.25,425.6719 Q2214.6563,425.3906 2214.0313,425.3906 Q2212.6875,425.3906 2212,426.4688 Q2211.3125,427.5313 2211.3125,429.625 Q2211.3125,431.7188 2212,432.7969 Q2212.6875,433.8594 2214.0313,433.8594 Q2214.6563,433.8594 2215.25,433.5938 Q2215.8438,433.3125 2216.4688,432.7344 L2216.4688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="229" x="2227.5" y="433.9668">helm-absolute-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2199.5" x2="2458.5" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2199.5" x2="2458.5" y1="453.8125" y2="453.8125"/><!--MD5=[4700ddfab9e311ad1ae5061cdd5496ba]
+class helm-source-ffiles--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-source-ffiles" style="stroke: #A80036; stroke-width: 1.5;" width="159" x="2494.5" y="413.8125"/><ellipse cx="2509.5" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2512.4688,435.4531 Q2511.8906,435.75 2511.25,435.8906 Q2510.6094,436.0469 2509.9063,436.0469 Q2507.4063,436.0469 2506.0781,434.4063 Q2504.7656,432.75 2504.7656,429.625 Q2504.7656,426.5 2506.0781,424.8438 Q2507.4063,423.1875 2509.9063,423.1875 Q2510.6094,423.1875 2511.25,423.3438 Q2511.9063,423.5 2512.4688,423.7969 L2512.4688,426.5156 Q2511.8438,425.9375 2511.25,425.6719 Q2510.6563,425.3906 2510.0313,425.3906 Q2508.6875,425.3906 2508,426.4688 Q2507.3125,427.5313 2507.3125,429.625 Q2507.3125,431.7188 2508,432.7969 Q2508.6875,433.8594 2510.0313,433.8594 Q2510.6563,433.8594 2511.25,433.5938 Q2511.8438,433.3125 2512.4688,432.7344 L2512.4688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="127" x="2523.5" y="433.9668">helm-source-ffiles</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2495.5" x2="2652.5" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2495.5" x2="2652.5" y1="453.8125" y2="453.8125"/><!--MD5=[5e8ec52a80544584992cb03033476cca]
+class helm-source-buffers--><rect fill="#FEFECE" filter="url(#fr2saz3zqti4l)" height="48" id="helm-source-buffers" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="2688.5" y="413.8125"/><ellipse cx="2703.5" cy="429.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2706.4688,435.4531 Q2705.8906,435.75 2705.25,435.8906 Q2704.6094,436.0469 2703.9063,436.0469 Q2701.4063,436.0469 2700.0781,434.4063 Q2698.7656,432.75 2698.7656,429.625 Q2698.7656,426.5 2700.0781,424.8438 Q2701.4063,423.1875 2703.9063,423.1875 Q2704.6094,423.1875 2705.25,423.3438 Q2705.9063,423.5 2706.4688,423.7969 L2706.4688,426.5156 Q2705.8438,425.9375 2705.25,425.6719 Q2704.6563,425.3906 2704.0313,425.3906 Q2702.6875,425.3906 2702,426.4688 Q2701.3125,427.5313 2701.3125,429.625 Q2701.3125,431.7188 2702,432.7969 Q2702.6875,433.8594 2704.0313,433.8594 Q2704.6563,433.8594 2705.25,433.5938 Q2705.8438,433.3125 2706.4688,432.7344 L2706.4688,435.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="2717.5" y="433.9668">helm-source-buffers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2689.5" x2="2862.5" y1="445.8125" y2="445.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2689.5" x2="2862.5" y1="453.8125" y2="453.8125"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M1525,160.0225 C1525,172.2425 1525,185.9225 1525,199.4825 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1518,159.9325,1525,139.9325,1532,159.9325,1518,159.9325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[52d97fd4d153f2c53b55b3f398cc83b3]
+reverse link helm-source-sync to helm-source-session-class--><path d="M1420.03,286.3125 C1200.76,304.6625 678.38,351.3825 243,413.8125 C237.45,414.6125 231.78,415.4625 226.06,416.3725 " fill="none" id="helm-source-sync&lt;-helm-source-session-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1419.46,279.3425,1439.98,284.6525,1420.63,293.2925,1419.46,279.3425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[808f17c2ae4c57b94c9dcfc78a1aa516]
+reverse link helm-source-sync to helm-files-dired-source--><path d="M1419.91,289.0625 C1230.48,309.8725 819.4,357.4325 475,413.8125 C469.12,414.7725 463.09,415.8125 457.01,416.9025 " fill="none" id="helm-source-sync&lt;-helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1419.35,282.0825,1440,286.8725,1420.88,296.0025,1419.35,282.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ca4b9f09c13c1ff3b2602cf75a58548c]
+reverse link helm-source-sync to helm-imenu-source--><path d="M1419.6,292.4725 C1258.87,315.3325 943.09,362.2325 677,413.8125 C671.35,414.9125 665.54,416.0925 659.68,417.3125 " fill="none" id="helm-source-sync&lt;-helm-imenu-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1419.04,285.4825,1439.82,289.6025,1421,299.3425,1419.04,285.4825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[5935dd93b3799671c2a2f238d681efd2]
+reverse link helm-source-sync to helm-files-in-current-dir-source--><path d="M1419.87,301.5525 C1285.78,331.8425 1055.43,383.8625 922.9,413.8025 " fill="none" id="helm-source-sync&lt;-helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1418.68,294.6525,1439.73,297.0725,1421.76,308.3025,1418.68,294.6525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c61a2677e41aced0f206eca3fb3deace]
+reverse link helm-source-sync to helm-recentf-source--><path d="M1420.97,314.1625 C1333.29,344.8025 1210.51,387.7125 1135.83,413.8125 " fill="none" id="helm-source-sync&lt;-helm-recentf-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1418.76,307.5225,1439.95,307.5325,1423.38,320.7425,1418.76,307.5225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[fef6fcdc8cf3b550f0b2dccd98f262c8]
+reverse link helm-source-sync to helm-eshell-history-source--><path d="M1423.48,350.8525 C1391.86,373.6025 1359.25,397.0625 1336.1,413.7125 " fill="none" id="helm-source-sync&lt;-helm-eshell-history-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1419.55,345.0525,1439.87,339.0625,1427.72,356.4225,1419.55,345.0525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[3538d698cbe22ffcb5425ab9a9243391]
+reverse link helm-source-sync to helm-esh-source--><path d="M1525,374.2725 C1525,388.8825 1525,402.6925 1525,413.5925 " fill="none" id="helm-source-sync&lt;-helm-esh-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1518,374.0525,1525,354.0525,1532,374.0525,1518,374.0525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7e5f38bd9ae0e1bb94a273709f715bc1]
+reverse link helm-source-sync to helm-epa--><path d="M1615.45,368.2625 C1632.25,385.0625 1648.39,401.2025 1660.78,413.5925 " fill="none" id="helm-source-sync&lt;-helm-epa" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1610.43,373.1425,1601.24,354.0525,1620.33,363.2425,1610.43,373.1425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[9f4d7494bd3425cac0331b57ecd466c2]
+reverse link helm-source-sync to helm-M-x-class--><path d="M1627.44,353.5025 C1627.63,353.6025 1627.81,353.7125 1628,353.8125 C1672.68,378.6725 1726.34,399.8925 1767.97,414.6525 " fill="none" id="helm-source-sync&lt;-helm-M-x-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1623.74,359.4425,1610.17,343.1625,1630.93,347.4325,1623.74,359.4425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[e9dfd0d46d933b60dace2e76a6fa8e40]
+reverse link helm-source-sync to helm-idle-time-timers-class--><path d="M1627.72,353.6925 C1627.81,353.7325 1627.91,353.7725 1628,353.8125 C1642.32,360.1125 1818.48,393.6125 1938.9,416.0725 " fill="none" id="helm-source-sync&lt;-helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1624.83,360.0725,1610.12,344.8125,1631.13,347.5725,1624.83,360.0725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[2dab3ea9bdbd523a70d6b4309b981517]
+reverse link helm-source-sync to helm-absolute-time-timers-class--><path d="M1629.1,352.8825 C1862.45,440.4925 1942.24,382.3225 2181,413.8125 C2186.67,414.5625 2192.46,415.3525 2198.31,416.1725 " fill="none" id="helm-source-sync&lt;-helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1626.32,359.3125,1610.17,345.5825,1631.35,346.2425,1626.32,359.3125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[016784bd64bc0242128ed351709a683a]
+reverse link helm-source-sync to helm-source-ffiles--><path d="M1629.22,352.4225 C1835.46,417.1625 2295.88,386.1225 2477,413.8125 C2482.65,414.6725 2488.45,415.7025 2494.27,416.8225 " fill="none" id="helm-source-sync&lt;-helm-source-ffiles" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1626.72,358.9625,1610.07,345.8525,1631.26,345.7225,1626.72,358.9625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[bd9832b2051106d13c2f652e2dc85e4c]
+reverse link helm-source-sync to helm-source-buffers--><path d="M1629.09,352.4025 C1876.89,430.1125 2446.95,383.0225 2671,413.8125 C2676.64,414.5825 2682.42,415.5025 2688.24,416.5225 " fill="none" id="helm-source-sync&lt;-helm-source-buffers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1626.73,358.9925,1610.04,345.9425,1631.23,345.7425,1626.73,358.9925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1478e29fc9fbb23173ed85ea36686ac5]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-sync'**\n\n
+"helm-source" <|- - "helm-source-sync"
+class "helm-source"
+class "helm-source-sync" {
+ Use this class to make helm
+ sources using a list of
+ candidates.
+ ==
+ __ some interesting slots __
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-source-sync"
+ **helm-source-sync**:
+ Use this class to make helm
+ sources using a list of
+ candidates.
+end note
+"helm-source-sync" <|- - "helm-source-session-class"
+"helm-source-sync" <|- - "helm-files-dired-source"
+"helm-source-sync" <|- - "helm-imenu-source"
+"helm-source-sync" <|- - "helm-files-in-current-dir-source"
+"helm-source-sync" <|- - "helm-recentf-source"
+"helm-source-sync" <|- - "helm-eshell-history-source"
+"helm-source-sync" <|- - "helm-esh-source"
+"helm-source-sync" <|- - "helm-epa"
+"helm-source-sync" <|- - "helm-M-x-class"
+"helm-source-sync" <|- - "helm-idle-time-timers-class"
+"helm-source-sync" <|- - "helm-absolute-time-timers-class"
+"helm-source-sync" <|- - "helm-source-ffiles"
+"helm-source-sync" <|- - "helm-source-buffers"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-source.png b/doc/helm-figures/helm-source.png
new file mode 100644
index 00000000..1bf51bc7
--- /dev/null
+++ b/doc/helm-figures/helm-source.png
Binary files differ
diff --git a/doc/helm-figures/helm-source.svg b/doc/helm-figures/helm-source.svg
new file mode 100644
index 00000000..f80d3bde
--- /dev/null
+++ b/doc/helm-figures/helm-source.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="879px" preserveAspectRatio="none" style="width:2275px;height:879px;" version="1.1" viewBox="0 0 2275 879" width="2275px" zoomAndPan="magnify"><defs><filter height="300%" id="fk5yunu3qcgyq" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="1021" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="136" x="1073" y="37.6611">'helm-source'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1144" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="1144" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="666.625" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="184" x="1097" y="91.8125"/><ellipse cx="1141.25" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1144.2188,113.4531 Q1143.6406,113.75 1143,113.8906 Q1142.3594,114.0469 1141.6563,114.0469 Q1139.1563,114.0469 1137.8281,112.4063 Q1136.5156,110.75 1136.5156,107.625 Q1136.5156,104.5 1137.8281,102.8438 Q1139.1563,101.1875 1141.6563,101.1875 Q1142.3594,101.1875 1143,101.3438 Q1143.6563,101.5 1144.2188,101.7969 L1144.2188,104.5156 Q1143.5938,103.9375 1143,103.6719 Q1142.4063,103.3906 1141.7813,103.3906 Q1140.4375,103.3906 1139.75,104.4688 Q1139.0625,105.5313 1139.0625,107.625 Q1139.0625,109.7188 1139.75,110.7969 Q1140.4375,111.8594 1141.7813,111.8594 Q1142.4063,111.8594 1143,111.5938 Q1143.5938,111.3125 1144.2188,110.7344 L1144.2188,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="1161.75" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1098" x2="1280" y1="123.8125" y2="123.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="162" x="1103" y="138.0229">Main interface to define helm</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="50" x="1103" y="150.8276">sources.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="1098" x2="1280" y1="157.4219" y2="157.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1098" x2="1280" y1="159.4219" y2="159.4219"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="17" x="1103" y="188.437">init</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="32" x="1103" y="201.2417">name</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="34" x="1103" y="214.0464">action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="1103" y="226.8511">action-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="1103" y="239.6558">after-init-hook</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="61" x="1103" y="252.4604">allow-dups</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="89" x="1103" y="265.2651">before-init-hook</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="131" x="1103" y="278.0698">candidate-number-limit</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="128" x="1103" y="290.8745">candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="1103" y="303.6792">candidates</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="1103" y="316.4839">cleanup</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="38" x="1103" y="329.2886">coerce</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="1103" y="342.0933">delayed</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="1103" y="354.8979">display-to-real</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="1103" y="367.7026">filter-one-by-one</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="172" x="1103" y="380.5073">filtered-candidate-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="1103" y="393.312">follow</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="67" x="1103" y="406.1167">follow-delay</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="66" x="1103" y="418.9214">fuzzy-match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="33" x="1103" y="431.7261">group</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="64" x="1103" y="444.5308">header-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="76" x="1103" y="457.3354">header-name</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="1103" y="470.1401">help-message</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="1103" y="482.9448">history</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="1103" y="495.7495">keymap</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="1103" y="508.5542">marked-with-props</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="35" x="1103" y="521.3589">match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="79" x="1103" y="534.1636">match-on-real</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="1103" y="546.9683">match-part</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="56" x="1103" y="559.7729">mode-line</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="48" x="1103" y="572.5776">multiline</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="1103" y="585.3823">multimatch</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="68" x="1103" y="598.187">must-match</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="62" x="1103" y="610.9917">nohighlight</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="43" x="1103" y="623.7964">nomark</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="1103" y="636.6011">pattern-transformer</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="96" x="1103" y="649.4058">persistent-action</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="107" x="1103" y="662.2104">persistent-action-if</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="86" x="1103" y="675.0151">persistent-help</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="81" x="1103" y="687.8198">real-to-display</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="52" x="1103" y="700.6245">redisplay</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="93" x="1103" y="713.4292">requires-pattern</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="44" x="1103" y="726.2339">resume</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="39" x="1103" y="739.0386">update</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="40" x="1103" y="751.8433">volatile</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1098" x2="1125.5" y1="171.8242" y2="171.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="1125.5" y="175.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1252.5" x2="1280" y1="171.8242" y2="171.8242"/><path d="M1316.5,397.8125 L1316.5,421.3125 L1281.04,425.3125 L1316.5,429.3125 L1316.5,453.2109 A0,0 0 0 0 1316.5,453.2109 L1523.5,453.2109 A0,0 0 0 0 1523.5,453.2109 L1523.5,407.8125 L1513.5,397.8125 L1316.5,397.8125 A0,0 0 0 0 1316.5,397.8125 " fill="#FBFB77" filter="url(#fk5yunu3qcgyq)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1513.5,397.8125 L1513.5,407.8125 L1523.5,407.8125 L1513.5,397.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="90" x="1322.5" y="414.8794">helm-source</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="1412.5" y="414.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="186" x="1322.5" y="430.0122">Main interface to define helm</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="54" x="1322.5" y="445.145">sources.</text><!--MD5=[1a4f21f1efd4e6c0dd550e1e5e387e5d]
+class helm-bookmark-override-inheritor--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="272" x="6" y="818.8125"/><ellipse cx="21" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,840.4531 Q23.3906,840.75 22.75,840.8906 Q22.1094,841.0469 21.4063,841.0469 Q18.9063,841.0469 17.5781,839.4063 Q16.2656,837.75 16.2656,834.625 Q16.2656,831.5 17.5781,829.8438 Q18.9063,828.1875 21.4063,828.1875 Q22.1094,828.1875 22.75,828.3438 Q23.4063,828.5 23.9688,828.7969 L23.9688,831.5156 Q23.3438,830.9375 22.75,830.6719 Q22.1563,830.3906 21.5313,830.3906 Q20.1875,830.3906 19.5,831.4688 Q18.8125,832.5313 18.8125,834.625 Q18.8125,836.7188 19.5,837.7969 Q20.1875,838.8594 21.5313,838.8594 Q22.1563,838.8594 22.75,838.5938 Q23.3438,838.3125 23.9688,837.7344 L23.9688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="35" y="838.9668">helm-bookmark-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="277" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="277" y1="858.8125" y2="858.8125"/><!--MD5=[d89fbe3a66aa0ad58442d3fbb0e3c04d]
+class helm-type-timers--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-type-timers" style="stroke: #A80036; stroke-width: 1.5;" width="153" x="313.5" y="818.8125"/><ellipse cx="328.5" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M331.4688,840.4531 Q330.8906,840.75 330.25,840.8906 Q329.6094,841.0469 328.9063,841.0469 Q326.4063,841.0469 325.0781,839.4063 Q323.7656,837.75 323.7656,834.625 Q323.7656,831.5 325.0781,829.8438 Q326.4063,828.1875 328.9063,828.1875 Q329.6094,828.1875 330.25,828.3438 Q330.9063,828.5 331.4688,828.7969 L331.4688,831.5156 Q330.8438,830.9375 330.25,830.6719 Q329.6563,830.3906 329.0313,830.3906 Q327.6875,830.3906 327,831.4688 Q326.3125,832.5313 326.3125,834.625 Q326.3125,836.7188 327,837.7969 Q327.6875,838.8594 329.0313,838.8594 Q329.6563,838.8594 330.25,838.5938 Q330.8438,838.3125 331.4688,837.7344 L331.4688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="342.5" y="838.9668">helm-type-timers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="314.5" x2="465.5" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="314.5" x2="465.5" y1="858.8125" y2="858.8125"/><!--MD5=[beabceb98eda0d1152a0edf286dc7000]
+class helm-type-command--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-type-command" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="501.5" y="818.8125"/><ellipse cx="516.5" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M519.4688,840.4531 Q518.8906,840.75 518.25,840.8906 Q517.6094,841.0469 516.9063,841.0469 Q514.4063,841.0469 513.0781,839.4063 Q511.7656,837.75 511.7656,834.625 Q511.7656,831.5 513.0781,829.8438 Q514.4063,828.1875 516.9063,828.1875 Q517.6094,828.1875 518.25,828.3438 Q518.9063,828.5 519.4688,828.7969 L519.4688,831.5156 Q518.8438,830.9375 518.25,830.6719 Q517.6563,830.3906 517.0313,830.3906 Q515.6875,830.3906 515,831.4688 Q514.3125,832.5313 514.3125,834.625 Q514.3125,836.7188 515,837.7969 Q515.6875,838.8594 517.0313,838.8594 Q517.6563,838.8594 518.25,838.5938 Q518.8438,838.3125 519.4688,837.7344 L519.4688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="530.5" y="838.9668">helm-type-command</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="502.5" x2="675.5" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="502.5" x2="675.5" y1="858.8125" y2="858.8125"/><!--MD5=[e7e10cea49efd04a6bea9ed9f44f1841]
+class helm-type-function--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-type-function" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="712" y="818.8125"/><ellipse cx="727" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M729.9688,840.4531 Q729.3906,840.75 728.75,840.8906 Q728.1094,841.0469 727.4063,841.0469 Q724.9063,841.0469 723.5781,839.4063 Q722.2656,837.75 722.2656,834.625 Q722.2656,831.5 723.5781,829.8438 Q724.9063,828.1875 727.4063,828.1875 Q728.1094,828.1875 728.75,828.3438 Q729.4063,828.5 729.9688,828.7969 L729.9688,831.5156 Q729.3438,830.9375 728.75,830.6719 Q728.1563,830.3906 727.5313,830.3906 Q726.1875,830.3906 725.5,831.4688 Q724.8125,832.5313 724.8125,834.625 Q724.8125,836.7188 725.5,837.7969 Q726.1875,838.8594 727.5313,838.8594 Q728.1563,838.8594 728.75,838.5938 Q729.3438,838.3125 729.9688,837.7344 L729.9688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="134" x="741" y="838.9668">helm-type-function</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="713" x2="877" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="713" x2="877" y1="858.8125" y2="858.8125"/><!--MD5=[44eb50c21698d944c3f7c5a7441762ef]
+class helm-type-buffer--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-type-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="151" x="913.5" y="818.8125"/><ellipse cx="928.5" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M931.4688,840.4531 Q930.8906,840.75 930.25,840.8906 Q929.6094,841.0469 928.9063,841.0469 Q926.4063,841.0469 925.0781,839.4063 Q923.7656,837.75 923.7656,834.625 Q923.7656,831.5 925.0781,829.8438 Q926.4063,828.1875 928.9063,828.1875 Q929.6094,828.1875 930.25,828.3438 Q930.9063,828.5 931.4688,828.7969 L931.4688,831.5156 Q930.8438,830.9375 930.25,830.6719 Q929.6563,830.3906 929.0313,830.3906 Q927.6875,830.3906 927,831.4688 Q926.3125,832.5313 926.3125,834.625 Q926.3125,836.7188 927,837.7969 Q927.6875,838.8594 929.0313,838.8594 Q929.6563,838.8594 930.25,838.5938 Q930.8438,838.3125 931.4688,837.7344 L931.4688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="942.5" y="838.9668">helm-type-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="914.5" x2="1063.5" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="914.5" x2="1063.5" y1="858.8125" y2="858.8125"/><!--MD5=[257e0c9decabcf296fc5e077c0fe3da7]
+class helm-type-bookmark--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="1100" y="818.8125"/><ellipse cx="1115" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1117.9688,840.4531 Q1117.3906,840.75 1116.75,840.8906 Q1116.1094,841.0469 1115.4063,841.0469 Q1112.9063,841.0469 1111.5781,839.4063 Q1110.2656,837.75 1110.2656,834.625 Q1110.2656,831.5 1111.5781,829.8438 Q1112.9063,828.1875 1115.4063,828.1875 Q1116.1094,828.1875 1116.75,828.3438 Q1117.4063,828.5 1117.9688,828.7969 L1117.9688,831.5156 Q1117.3438,830.9375 1116.75,830.6719 Q1116.1563,830.3906 1115.5313,830.3906 Q1114.1875,830.3906 1113.5,831.4688 Q1112.8125,832.5313 1112.8125,834.625 Q1112.8125,836.7188 1113.5,837.7969 Q1114.1875,838.8594 1115.5313,838.8594 Q1116.1563,838.8594 1116.75,838.5938 Q1117.3438,838.3125 1117.9688,837.7344 L1117.9688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="146" x="1129" y="838.9668">helm-type-bookmark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1101" x2="1277" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1101" x2="1277" y1="858.8125" y2="858.8125"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="130" x="1313" y="818.8125"/><ellipse cx="1328" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1330.9688,840.4531 Q1330.3906,840.75 1329.75,840.8906 Q1329.1094,841.0469 1328.4063,841.0469 Q1325.9063,841.0469 1324.5781,839.4063 Q1323.2656,837.75 1323.2656,834.625 Q1323.2656,831.5 1324.5781,829.8438 Q1325.9063,828.1875 1328.4063,828.1875 Q1329.1094,828.1875 1329.75,828.3438 Q1330.4063,828.5 1330.9688,828.7969 L1330.9688,831.5156 Q1330.3438,830.9375 1329.75,830.6719 Q1329.1563,830.3906 1328.5313,830.3906 Q1327.1875,830.3906 1326.5,831.4688 Q1325.8125,832.5313 1325.8125,834.625 Q1325.8125,836.7188 1326.5,837.7969 Q1327.1875,838.8594 1328.5313,838.8594 Q1329.1563,838.8594 1329.75,838.5938 Q1330.3438,838.3125 1330.9688,837.7344 L1330.9688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="1342" y="838.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1314" x2="1442" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1314" x2="1442" y1="858.8125" y2="858.8125"/><!--MD5=[5adfb603e84a1ac071a064f5c8c4d8a3]
+class helm-source-dummy--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-source-dummy" style="stroke: #A80036; stroke-width: 1.5;" width="174" x="1478" y="818.8125"/><ellipse cx="1493" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1495.9688,840.4531 Q1495.3906,840.75 1494.75,840.8906 Q1494.1094,841.0469 1493.4063,841.0469 Q1490.9063,841.0469 1489.5781,839.4063 Q1488.2656,837.75 1488.2656,834.625 Q1488.2656,831.5 1489.5781,829.8438 Q1490.9063,828.1875 1493.4063,828.1875 Q1494.1094,828.1875 1494.75,828.3438 Q1495.4063,828.5 1495.9688,828.7969 L1495.9688,831.5156 Q1495.3438,830.9375 1494.75,830.6719 Q1494.1563,830.3906 1493.5313,830.3906 Q1492.1875,830.3906 1491.5,831.4688 Q1490.8125,832.5313 1490.8125,834.625 Q1490.8125,836.7188 1491.5,837.7969 Q1492.1875,838.8594 1493.5313,838.8594 Q1494.1563,838.8594 1494.75,838.5938 Q1495.3438,838.3125 1495.9688,837.7344 L1495.9688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="142" x="1507" y="838.9668">helm-source-dummy</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1479" x2="1651" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1479" x2="1651" y1="858.8125" y2="858.8125"/><!--MD5=[df56542e8c7b1aabe649dc484b739778]
+class helm-source-in-buffer--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="185" x="1687.5" y="818.8125"/><ellipse cx="1702.5" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1705.4688,840.4531 Q1704.8906,840.75 1704.25,840.8906 Q1703.6094,841.0469 1702.9063,841.0469 Q1700.4063,841.0469 1699.0781,839.4063 Q1697.7656,837.75 1697.7656,834.625 Q1697.7656,831.5 1699.0781,829.8438 Q1700.4063,828.1875 1702.9063,828.1875 Q1703.6094,828.1875 1704.25,828.3438 Q1704.9063,828.5 1705.4688,828.7969 L1705.4688,831.5156 Q1704.8438,830.9375 1704.25,830.6719 Q1703.6563,830.3906 1703.0313,830.3906 Q1701.6875,830.3906 1701,831.4688 Q1700.3125,832.5313 1700.3125,834.625 Q1700.3125,836.7188 1701,837.7969 Q1701.6875,838.8594 1703.0313,838.8594 Q1703.6563,838.8594 1704.25,838.5938 Q1704.8438,838.3125 1705.4688,837.7344 L1705.4688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="1716.5" y="838.9668">helm-source-in-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1688.5" x2="1871.5" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1688.5" x2="1871.5" y1="858.8125" y2="858.8125"/><!--MD5=[12d16a9c65828dace8d907a7ab3ef450]
+class helm-source-async--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-source-async" style="stroke: #A80036; stroke-width: 1.5;" width="165" x="1907.5" y="818.8125"/><ellipse cx="1922.5" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1925.4688,840.4531 Q1924.8906,840.75 1924.25,840.8906 Q1923.6094,841.0469 1922.9063,841.0469 Q1920.4063,841.0469 1919.0781,839.4063 Q1917.7656,837.75 1917.7656,834.625 Q1917.7656,831.5 1919.0781,829.8438 Q1920.4063,828.1875 1922.9063,828.1875 Q1923.6094,828.1875 1924.25,828.3438 Q1924.9063,828.5 1925.4688,828.7969 L1925.4688,831.5156 Q1924.8438,830.9375 1924.25,830.6719 Q1923.6563,830.3906 1923.0313,830.3906 Q1921.6875,830.3906 1921,831.4688 Q1920.3125,832.5313 1920.3125,834.625 Q1920.3125,836.7188 1921,837.7969 Q1921.6875,838.8594 1923.0313,838.8594 Q1923.6563,838.8594 1924.25,838.5938 Q1924.8438,838.3125 1925.4688,837.7344 L1925.4688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="133" x="1936.5" y="838.9668">helm-source-async</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1908.5" x2="2071.5" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1908.5" x2="2071.5" y1="858.8125" y2="858.8125"/><!--MD5=[29825b4f2a07190321f66d6028a4dd26]
+class helm-source-sync--><rect fill="#FEFECE" filter="url(#fk5yunu3qcgyq)" height="48" id="helm-source-sync" style="stroke: #A80036; stroke-width: 1.5;" width="156" x="2108" y="818.8125"/><ellipse cx="2123" cy="834.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M2125.9688,840.4531 Q2125.3906,840.75 2124.75,840.8906 Q2124.1094,841.0469 2123.4063,841.0469 Q2120.9063,841.0469 2119.5781,839.4063 Q2118.2656,837.75 2118.2656,834.625 Q2118.2656,831.5 2119.5781,829.8438 Q2120.9063,828.1875 2123.4063,828.1875 Q2124.1094,828.1875 2124.75,828.3438 Q2125.4063,828.5 2125.9688,828.7969 L2125.9688,831.5156 Q2125.3438,830.9375 2124.75,830.6719 Q2124.1563,830.3906 2123.5313,830.3906 Q2122.1875,830.3906 2121.5,831.4688 Q2120.8125,832.5313 2120.8125,834.625 Q2120.8125,836.7188 2121.5,837.7969 Q2122.1875,838.8594 2123.5313,838.8594 Q2124.1563,838.8594 2124.75,838.5938 Q2125.3438,838.3125 2125.9688,837.7344 L2125.9688,840.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="124" x="2137" y="838.9668">helm-source-sync</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="2109" x2="2263" y1="850.8125" y2="850.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="2109" x2="2263" y1="858.8125" y2="858.8125"/><!--MD5=[116a0e90e894ac99238d97b5f2f654c6]
+reverse link helm-source to helm-bookmark-override-inheritor--><path d="M1077.91,470.4025 C856.79,558.1525 368.44,751.9525 200.26,818.6925 " fill="none" id="helm-source&lt;-helm-bookmark-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1075.37,463.8725,1096.55,463.0025,1080.54,476.8825,1075.37,463.8725" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[687fc8ec140e945488f732dae3c46e2b]
+reverse link helm-source to helm-type-timers--><path d="M1079.21,483.4025 C901.11,576.0225 556.84,755.0525 434.48,818.6825 " fill="none" id="helm-source&lt;-helm-type-timers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1075.98,477.1925,1096.95,474.1825,1082.44,489.6125,1075.98,477.1925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[fde896bcedf28e4926ec99232971bb19]
+reverse link helm-source to helm-type-command--><path d="M1080.44,501.4925 C941.55,597.6725 708.65,758.9525 622.43,818.6625 " fill="none" id="helm-source&lt;-helm-type-command" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1076.46,495.7325,1096.89,490.0925,1084.44,507.2425,1076.46,495.7325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[cb8c671e8f25dea26b71b20786c595d4]
+reverse link helm-source to helm-type-function--><path d="M1083.09,538.0025 C991.75,634.3225 866.93,765.9625 816.97,818.6425 " fill="none" id="helm-source&lt;-helm-type-function" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1078.03,533.1625,1096.87,523.4625,1088.19,542.7925,1078.03,533.1625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[528fc0d38c023ea499a6c44f22caf734]
+reverse link helm-source to helm-type-buffer--><path d="M1088.15,635.8325 C1052.72,709.4325 1017.44,782.7225 1000.09,818.7825 " fill="none" id="helm-source&lt;-helm-type-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1081.92,632.6325,1096.9,617.6425,1094.54,638.7025,1081.92,632.6325" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b3073f519ff1e7a9af7ffffd7406ad63]
+reverse link helm-source to helm-type-bookmark--><path d="M1189,779.3125 C1189,794.9425 1189,808.3725 1189,818.7325 " fill="none" id="helm-source&lt;-helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1182,779.2225,1189,759.2225,1196,779.2225,1182,779.2225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M1290.55,744.1525 C1293.3,749.1125 1296.12,754.0025 1299,758.8125 C1312.71,781.6725 1333.71,803.3425 1350.61,818.8025 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1284.35,747.3925,1281.15,726.4525,1296.71,740.8325,1284.35,747.3925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[08cc1f31d63ae7c2a5398bb390fce2ff]
+reverse link helm-source to helm-source-dummy--><path d="M1294.64,754.4025 C1296.07,755.8925 1297.53,757.3625 1299,758.8125 C1312.26,771.8525 1405.54,799.1625 1477.94,818.9025 " fill="none" id="helm-source&lt;-helm-source-dummy" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1289.22,758.8425,1281.2,739.2325,1299.7,749.5625,1289.22,758.8425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[720fe72c7a837b3f6a94e411349ef229]
+reverse link helm-source to helm-source-in-buffer--><path d="M1295.81,756.0325 C1296.86,756.9725 1297.93,757.8925 1299,758.8125 C1426.12,867.1625 1505.76,788.3825 1670,818.8125 C1675.66,819.8625 1681.47,820.9725 1687.34,822.1225 " fill="none" id="helm-source&lt;-helm-source-in-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1290.68,760.8025,1281.3,741.8025,1300.48,750.8125,1290.68,760.8025" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[894eacf2e17d1c2f4b307c7f81f3aeea]
+reverse link helm-source to helm-source-async--><path d="M1296.08,756.4225 C1297.05,757.2325 1298.02,758.0225 1299,758.8125 C1401.96,841.4325 1759.75,797.3125 1890,818.8125 C1895.71,819.7525 1901.59,820.8325 1907.49,821.9825 " fill="none" id="helm-source&lt;-helm-source-async" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1291.11,761.3625,1281.2,742.6325,1300.63,751.0925,1291.11,761.3625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7fac0f6d78841877506d9722364fbb5e]
+reverse link helm-source to helm-source-sync--><path d="M1296.05,756.4625 C1297.03,757.2525 1298.01,758.0325 1299,758.8125 C1368.44,813.0925 2002.92,805.1725 2090,818.8125 C2095.84,819.7325 2101.85,820.8125 2107.88,822.0125 " fill="none" id="helm-source&lt;-helm-source-sync" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="1291.15,761.4625,1281.03,742.8525,1300.55,751.0825,1291.15,761.4625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c8ae02deb66d539a4211bd8e57a6a66b]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source'**\n\n
+class "helm-source" {
+ Main interface to define helm
+ sources.
+ ==
+ __ some interesting slots __
+ init
+ name
+ action
+ action-transformer
+ after-init-hook
+ allow-dups
+ before-init-hook
+ candidate-number-limit
+ candidate-transformer
+ candidates
+ cleanup
+ coerce
+ delayed
+ display-to-real
+ filter-one-by-one
+ filtered-candidate-transformer
+ follow
+ follow-delay
+ fuzzy-match
+ group
+ header-line
+ header-name
+ help-message
+ history
+ keymap
+ marked-with-props
+ match
+ match-on-real
+ match-part
+ mode-line
+ multiline
+ multimatch
+ must-match
+ nohighlight
+ nomark
+ pattern-transformer
+ persistent-action
+ persistent-action-if
+ persistent-help
+ real-to-display
+ redisplay
+ requires-pattern
+ resume
+ update
+ volatile
+}
+note right of "helm-source"
+ **helm-source**:
+ Main interface to define helm
+ sources.
+end note
+"helm-source" <|- - "helm-bookmark-override-inheritor"
+"helm-source" <|- - "helm-type-timers"
+"helm-source" <|- - "helm-type-command"
+"helm-source" <|- - "helm-type-function"
+"helm-source" <|- - "helm-type-buffer"
+"helm-source" <|- - "helm-type-bookmark"
+"helm-source" <|- - "helm-type-file"
+"helm-source" <|- - "helm-source-dummy"
+"helm-source" <|- - "helm-source-in-buffer"
+"helm-source" <|- - "helm-source-async"
+"helm-source" <|- - "helm-source-sync"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-type-bookmark.png b/doc/helm-figures/helm-type-bookmark.png
new file mode 100644
index 00000000..e385d46a
--- /dev/null
+++ b/doc/helm-figures/helm-type-bookmark.png
Binary files differ
diff --git a/doc/helm-figures/helm-type-bookmark.svg b/doc/helm-figures/helm-type-bookmark.svg
new file mode 100644
index 00000000..1ca8abfa
--- /dev/null
+++ b/doc/helm-figures/helm-type-bookmark.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="411px" preserveAspectRatio="none" style="width:594px;height:411px;" version="1.1" viewBox="0 0 594 411" width="594px" zoomAndPan="magnify"><defs><filter height="300%" id="fibyuj8fy77pf" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="180" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="221" x="189.5" y="37.6611">'helm-type-bookmark'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="303" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="303" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fibyuj8fy77pf)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="219" y="91.8125"/><ellipse cx="234" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M236.9688,113.4531 Q236.3906,113.75 235.75,113.8906 Q235.1094,114.0469 234.4063,114.0469 Q231.9063,114.0469 230.5781,112.4063 Q229.2656,110.75 229.2656,107.625 Q229.2656,104.5 230.5781,102.8438 Q231.9063,101.1875 234.4063,101.1875 Q235.1094,101.1875 235.75,101.3438 Q236.4063,101.5 236.9688,101.7969 L236.9688,104.5156 Q236.3438,103.9375 235.75,103.6719 Q235.1563,103.3906 234.5313,103.3906 Q233.1875,103.3906 232.5,104.4688 Q231.8125,105.5313 231.8125,107.625 Q231.8125,109.7188 232.5,110.7969 Q233.1875,111.8594 234.5313,111.8594 Q235.1563,111.8594 235.75,111.5938 Q236.3438,111.3125 236.9688,110.7344 L236.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="248" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="220" x2="337" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="220" x2="337" y1="131.8125" y2="131.8125"/><!--MD5=[257e0c9decabcf296fc5e077c0fe3da7]
+class helm-type-bookmark--><rect fill="#FEFECE" filter="url(#fibyuj8fy77pf)" height="92.8164" id="helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.5;" width="178" x="189.5" y="199.8125"/><ellipse cx="204.5" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M207.4688,221.4531 Q206.8906,221.75 206.25,221.8906 Q205.6094,222.0469 204.9063,222.0469 Q202.4063,222.0469 201.0781,220.4063 Q199.7656,218.75 199.7656,215.625 Q199.7656,212.5 201.0781,210.8438 Q202.4063,209.1875 204.9063,209.1875 Q205.6094,209.1875 206.25,209.3438 Q206.9063,209.5 207.4688,209.7969 L207.4688,212.5156 Q206.8438,211.9375 206.25,211.6719 Q205.6563,211.3906 205.0313,211.3906 Q203.6875,211.3906 203,212.4688 Q202.3125,213.5313 202.3125,215.625 Q202.3125,217.7188 203,218.7969 Q203.6875,219.8594 205.0313,219.8594 Q205.6563,219.8594 206.25,219.5938 Q206.8438,219.3125 207.4688,218.7344 L207.4688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="146" x="218.5" y="219.9668">helm-type-bookmark</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="190.5" x2="366.5" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="119" x="195.5" y="246.0229">A class to define type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="67" x="195.5" y="258.8276">bookmarks.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="190.5" x2="366.5" y1="265.4219" y2="265.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="190.5" x2="366.5" y1="267.4219" y2="267.4219"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="190.5" x2="215" y1="279.8242" y2="279.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="215" y="283.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="342" x2="366.5" y1="279.8242" y2="279.8242"/><path d="M403,218.8125 L403,242.3125 L367.53,246.3125 L403,250.3125 L403,274.2109 A0,0 0 0 0 403,274.2109 L582,274.2109 A0,0 0 0 0 582,274.2109 L582,228.8125 L572,218.8125 L403,218.8125 A0,0 0 0 0 403,218.8125 " fill="#FBFB77" filter="url(#fibyuj8fy77pf)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M572,218.8125 L572,228.8125 L582,228.8125 L572,218.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="154" x="409" y="235.8794">helm-type-bookmark</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="563" y="235.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="137" x="409" y="251.0122">A class to define type</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="75" x="409" y="266.145">bookmarks.</text><!--MD5=[1b5f639ef80bc5f44c8cc4600bf3e2e4]
+class helm-source-filtered-bookmarks--><rect fill="#FEFECE" filter="url(#fibyuj8fy77pf)" height="48" id="helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="259" x="6" y="352.8125"/><ellipse cx="21" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,374.4531 Q23.3906,374.75 22.75,374.8906 Q22.1094,375.0469 21.4063,375.0469 Q18.9063,375.0469 17.5781,373.4063 Q16.2656,371.75 16.2656,368.625 Q16.2656,365.5 17.5781,363.8438 Q18.9063,362.1875 21.4063,362.1875 Q22.1094,362.1875 22.75,362.3438 Q23.4063,362.5 23.9688,362.7969 L23.9688,365.5156 Q23.3438,364.9375 22.75,364.6719 Q22.1563,364.3906 21.5313,364.3906 Q20.1875,364.3906 19.5,365.4688 Q18.8125,366.5313 18.8125,368.625 Q18.8125,370.7188 19.5,371.7969 Q20.1875,372.8594 21.5313,372.8594 Q22.1563,372.8594 22.75,372.5938 Q23.3438,372.3125 23.9688,371.7344 L23.9688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="227" x="35" y="372.9668">helm-source-filtered-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="264" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="264" y1="392.8125" y2="392.8125"/><!--MD5=[bf73905ec5fe3c8fa1d96a26605c7c43]
+class helm-source-basic-bookmarks--><rect fill="#FEFECE" filter="url(#fibyuj8fy77pf)" height="48" id="helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.5;" width="244" x="300.5" y="352.8125"/><ellipse cx="315.5" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M318.4688,374.4531 Q317.8906,374.75 317.25,374.8906 Q316.6094,375.0469 315.9063,375.0469 Q313.4063,375.0469 312.0781,373.4063 Q310.7656,371.75 310.7656,368.625 Q310.7656,365.5 312.0781,363.8438 Q313.4063,362.1875 315.9063,362.1875 Q316.6094,362.1875 317.25,362.3438 Q317.9063,362.5 318.4688,362.7969 L318.4688,365.5156 Q317.8438,364.9375 317.25,364.6719 Q316.6563,364.3906 316.0313,364.3906 Q314.6875,364.3906 314,365.4688 Q313.3125,366.5313 313.3125,368.625 Q313.3125,370.7188 314,371.7969 Q314.6875,372.8594 316.0313,372.8594 Q316.6563,372.8594 317.25,372.5938 Q317.8438,372.3125 318.4688,371.7344 L318.4688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="212" x="329.5" y="372.9668">helm-source-basic-bookmarks</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="301.5" x2="543.5" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="301.5" x2="543.5" y1="392.8125" y2="392.8125"/><!--MD5=[b3073f519ff1e7a9af7ffffd7406ad63]
+reverse link helm-source to helm-type-bookmark--><path d="M278.5,160.4125 C278.5,173.0325 278.5,186.8425 278.5,199.5825 " fill="none" id="helm-source&lt;-helm-type-bookmark" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="271.5,160.0825,278.5,140.0825,285.5,160.0825,271.5,160.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[36bf56344c9fb562b92d13c27d56d2e6]
+reverse link helm-type-bookmark to helm-source-filtered-bookmarks--><path d="M212.61,306.5225 C194.4,322.8825 175.7,339.6825 161.28,352.6425 " fill="none" id="helm-type-bookmark&lt;-helm-source-filtered-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="208.13,301.1425,227.68,292.9825,217.48,311.5525,208.13,301.1425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[d74130942a07ed6c44229600fa80fecc]
+reverse link helm-type-bookmark to helm-source-basic-bookmarks--><path d="M344.85,306.5225 C363.19,322.8825 382.02,339.6825 396.54,352.6425 " fill="none" id="helm-type-bookmark&lt;-helm-source-basic-bookmarks" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="339.94,311.5225,329.67,292.9825,349.26,301.0725,339.94,311.5225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[b53f6f79b67e2b8ebf99e4330447bc90]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-bookmark'**\n\n
+"helm-source" <|- - "helm-type-bookmark"
+class "helm-source"
+class "helm-type-bookmark" {
+ A class to define type
+ bookmarks.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-bookmark"
+ **helm-type-bookmark**:
+ A class to define type
+ bookmarks.
+end note
+"helm-type-bookmark" <|- - "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|- - "helm-source-basic-bookmarks"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-type-buffer.png b/doc/helm-figures/helm-type-buffer.png
new file mode 100644
index 00000000..5b402c18
--- /dev/null
+++ b/doc/helm-figures/helm-type-buffer.png
Binary files differ
diff --git a/doc/helm-figures/helm-type-buffer.svg b/doc/helm-figures/helm-type-buffer.svg
new file mode 100644
index 00000000..41c90275
--- /dev/null
+++ b/doc/helm-figures/helm-type-buffer.svg
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="398px" preserveAspectRatio="none" style="width:430px;height:398px;" version="1.1" viewBox="0 0 430 398" width="430px" zoomAndPan="magnify"><defs><filter height="300%" id="fuko8b35atc2d" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="98" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="184" x="126" y="37.6611">'helm-type-buffer'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="221" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="221" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fuko8b35atc2d)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="34" y="91.8125"/><ellipse cx="49" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M51.9688,113.4531 Q51.3906,113.75 50.75,113.8906 Q50.1094,114.0469 49.4063,114.0469 Q46.9063,114.0469 45.5781,112.4063 Q44.2656,110.75 44.2656,107.625 Q44.2656,104.5 45.5781,102.8438 Q46.9063,101.1875 49.4063,101.1875 Q50.1094,101.1875 50.75,101.3438 Q51.4063,101.5 51.9688,101.7969 L51.9688,104.5156 Q51.3438,103.9375 50.75,103.6719 Q50.1563,103.3906 49.5313,103.3906 Q48.1875,103.3906 47.5,104.4688 Q46.8125,105.5313 46.8125,107.625 Q46.8125,109.7188 47.5,110.7969 Q48.1875,111.8594 49.5313,111.8594 Q50.1563,111.8594 50.75,111.5938 Q51.3438,111.3125 51.9688,110.7344 L51.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="63" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="35" x2="152" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="35" x2="152" y1="131.8125" y2="131.8125"/><!--MD5=[44eb50c21698d944c3f7c5a7441762ef]
+class helm-type-buffer--><rect fill="#FEFECE" filter="url(#fuko8b35atc2d)" height="80.0117" id="helm-type-buffer" style="stroke: #A80036; stroke-width: 1.5;" width="172" x="7.5" y="199.8125"/><ellipse cx="31.95" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M34.9188,221.4531 Q34.3406,221.75 33.7,221.8906 Q33.0594,222.0469 32.3563,222.0469 Q29.8563,222.0469 28.5281,220.4063 Q27.2156,218.75 27.2156,215.625 Q27.2156,212.5 28.5281,210.8438 Q29.8563,209.1875 32.3563,209.1875 Q33.0594,209.1875 33.7,209.3438 Q34.3563,209.5 34.9188,209.7969 L34.9188,212.5156 Q34.2938,211.9375 33.7,211.6719 Q33.1063,211.3906 32.4813,211.3906 Q31.1375,211.3906 30.45,212.4688 Q29.7625,213.5313 29.7625,215.625 Q29.7625,217.7188 30.45,218.7969 Q31.1375,219.8594 32.4813,219.8594 Q33.1063,219.8594 33.7,219.5938 Q34.2938,219.3125 34.9188,218.7344 L34.9188,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="119" x="48.05" y="219.9668">helm-type-buffer</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="8.5" x2="178.5" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="160" x="13.5" y="246.0229">A class to define type buffer.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="8.5" x2="178.5" y1="252.6172" y2="252.6172"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="8.5" x2="178.5" y1="254.6172" y2="254.6172"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="8.5" x2="30" y1="267.0195" y2="267.0195"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="30" y="270.3276">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="157" x2="178.5" y1="267.0195" y2="267.0195"/><path d="M215,219.8125 L215,235.8125 L179.74,239.8125 L215,243.8125 L215,260.0781 A0,0 0 0 0 215,260.0781 L418,260.0781 A0,0 0 0 0 418,260.0781 L418,229.8125 L408,219.8125 L215,219.8125 A0,0 0 0 0 215,219.8125 " fill="#FBFB77" filter="url(#fuko8b35atc2d)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M408,219.8125 L408,229.8125 L418,229.8125 L408,219.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="125" x="221" y="236.8794">helm-type-buffer</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="346" y="236.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="182" x="221" y="252.0122">A class to define type buffer.</text><!--MD5=[5e8ec52a80544584992cb03033476cca]
+class helm-source-buffers--><rect fill="#FEFECE" filter="url(#fuko8b35atc2d)" height="48" id="helm-source-buffers" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="6" y="339.8125"/><ellipse cx="21" cy="355.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,361.4531 Q23.3906,361.75 22.75,361.8906 Q22.1094,362.0469 21.4063,362.0469 Q18.9063,362.0469 17.5781,360.4063 Q16.2656,358.75 16.2656,355.625 Q16.2656,352.5 17.5781,350.8438 Q18.9063,349.1875 21.4063,349.1875 Q22.1094,349.1875 22.75,349.3438 Q23.4063,349.5 23.9688,349.7969 L23.9688,352.5156 Q23.3438,351.9375 22.75,351.6719 Q22.1563,351.3906 21.5313,351.3906 Q20.1875,351.3906 19.5,352.4688 Q18.8125,353.5313 18.8125,355.625 Q18.8125,357.7188 19.5,358.7969 Q20.1875,359.8594 21.5313,359.8594 Q22.1563,359.8594 22.75,359.5938 Q23.3438,359.3125 23.9688,358.7344 L23.9688,361.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="35" y="359.9668">helm-source-buffers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="180" y1="371.8125" y2="371.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="180" y1="379.8125" y2="379.8125"/><!--MD5=[528fc0d38c023ea499a6c44f22caf734]
+reverse link helm-source to helm-type-buffer--><path d="M93.5,160.0625 C93.5,172.8525 93.5,186.7925 93.5,199.3425 " fill="none" id="helm-source&lt;-helm-type-buffer" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="86.5,160.0425,93.5,140.0425,100.5,160.0425,86.5,160.0425" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[88c02f9cf13fd6689df37b68aefeb8b8]
+reverse link helm-type-buffer to helm-source-buffers--><path d="M93.5,300.1925 C93.5,314.2125 93.5,328.3425 93.5,339.6225 " fill="none" id="helm-type-buffer&lt;-helm-source-buffers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="86.5,300.0825,93.5,280.0825,100.5,300.0825,86.5,300.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4eb9053afec4b05814ad68d4d45dac60]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-buffer'**\n\n
+"helm-source" <|- - "helm-type-buffer"
+class "helm-source"
+class "helm-type-buffer" {
+ A class to define type buffer.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-buffer"
+ **helm-type-buffer**:
+ A class to define type buffer.
+end note
+"helm-type-buffer" <|- - "helm-source-buffers"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-type-command.png b/doc/helm-figures/helm-type-command.png
new file mode 100644
index 00000000..90a27956
--- /dev/null
+++ b/doc/helm-figures/helm-type-command.png
Binary files differ
diff --git a/doc/helm-figures/helm-type-command.svg b/doc/helm-figures/helm-type-command.svg
new file mode 100644
index 00000000..759d5606
--- /dev/null
+++ b/doc/helm-figures/helm-type-command.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="411px" preserveAspectRatio="none" style="width:422px;height:411px;" version="1.1" viewBox="0 0 422 411" width="422px" zoomAndPan="magnify"><defs><filter height="300%" id="f1cfbaeqz53hlj" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="94.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="218" x="105.5" y="37.6611">'helm-type-command'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="217.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="217.5" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1cfbaeqz53hlj)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="34" y="91.8125"/><ellipse cx="49" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M51.9688,113.4531 Q51.3906,113.75 50.75,113.8906 Q50.1094,114.0469 49.4063,114.0469 Q46.9063,114.0469 45.5781,112.4063 Q44.2656,110.75 44.2656,107.625 Q44.2656,104.5 45.5781,102.8438 Q46.9063,101.1875 49.4063,101.1875 Q50.1094,101.1875 50.75,101.3438 Q51.4063,101.5 51.9688,101.7969 L51.9688,104.5156 Q51.3438,103.9375 50.75,103.6719 Q50.1563,103.3906 49.5313,103.3906 Q48.1875,103.3906 47.5,104.4688 Q46.8125,105.5313 46.8125,107.625 Q46.8125,109.7188 47.5,110.7969 Q48.1875,111.8594 49.5313,111.8594 Q50.1563,111.8594 50.75,111.5938 Q51.3438,111.3125 51.9688,110.7344 L51.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="63" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="35" x2="152" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="35" x2="152" y1="131.8125" y2="131.8125"/><!--MD5=[beabceb98eda0d1152a0edf286dc7000]
+class helm-type-command--><rect fill="#FEFECE" filter="url(#f1cfbaeqz53hlj)" height="92.8164" id="helm-type-command" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="35" y="219.9668">helm-type-command</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="180" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="12" y="246.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="60" x="12" y="258.8276">command.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="180" y1="265.4219" y2="265.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="180" y1="267.4219" y2="267.4219"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="30" y1="279.8242" y2="279.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="30" y="283.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="157" x2="180" y1="279.8242" y2="279.8242"/><path d="M216.5,218.8125 L216.5,242.3125 L181.16,246.3125 L216.5,250.3125 L216.5,274.2109 A0,0 0 0 0 216.5,274.2109 L410.5,274.2109 A0,0 0 0 0 410.5,274.2109 L410.5,228.8125 L400.5,218.8125 L216.5,218.8125 A0,0 0 0 0 216.5,218.8125 " fill="#FBFB77" filter="url(#f1cfbaeqz53hlj)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M400.5,218.8125 L400.5,228.8125 L410.5,228.8125 L400.5,218.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="222.5" y="235.8794">helm-type-command</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="374.5" y="235.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="173" x="222.5" y="251.0122">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="69" x="222.5" y="266.145">command.</text><!--MD5=[9bb915cdd04b5f6bf4c2c1633cbdfbdc]
+class helm-M-x-class--><rect fill="#FEFECE" filter="url(#f1cfbaeqz53hlj)" height="48" id="helm-M-x-class" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="25.5" y="352.8125"/><ellipse cx="40.5" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M43.4688,374.4531 Q42.8906,374.75 42.25,374.8906 Q41.6094,375.0469 40.9063,375.0469 Q38.4063,375.0469 37.0781,373.4063 Q35.7656,371.75 35.7656,368.625 Q35.7656,365.5 37.0781,363.8438 Q38.4063,362.1875 40.9063,362.1875 Q41.6094,362.1875 42.25,362.3438 Q42.9063,362.5 43.4688,362.7969 L43.4688,365.5156 Q42.8438,364.9375 42.25,364.6719 Q41.6563,364.3906 41.0313,364.3906 Q39.6875,364.3906 39,365.4688 Q38.3125,366.5313 38.3125,368.625 Q38.3125,370.7188 39,371.7969 Q39.6875,372.8594 41.0313,372.8594 Q41.6563,372.8594 42.25,372.5938 Q42.8438,372.3125 43.4688,371.7344 L43.4688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="104" x="54.5" y="372.9668">helm-M-x-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="26.5" x2="160.5" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="26.5" x2="160.5" y1="392.8125" y2="392.8125"/><!--MD5=[fde896bcedf28e4926ec99232971bb19]
+reverse link helm-source to helm-type-command--><path d="M93.5,160.4125 C93.5,173.0325 93.5,186.8425 93.5,199.5825 " fill="none" id="helm-source&lt;-helm-type-command" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="86.5,160.0825,93.5,140.0825,100.5,160.0825,86.5,160.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[4ac71f6dd5cea0c13d2b9c31bc00a812]
+reverse link helm-type-command to helm-M-x-class--><path d="M93.5,313.4125 C93.5,327.5125 93.5,341.5025 93.5,352.6425 " fill="none" id="helm-type-command&lt;-helm-M-x-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="86.5,312.9825,93.5,292.9825,100.5,312.9825,86.5,312.9825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[1ef70213ca09967b8d79aac4350d6b32]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-command'**\n\n
+"helm-source" <|- - "helm-type-command"
+class "helm-source"
+class "helm-type-command" {
+ A class to define helm type
+ command.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-command"
+ **helm-type-command**:
+ A class to define helm type
+ command.
+end note
+"helm-type-command" <|- - "helm-M-x-class"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-type-file.png b/doc/helm-figures/helm-type-file.png
new file mode 100644
index 00000000..052cd196
--- /dev/null
+++ b/doc/helm-figures/helm-type-file.png
Binary files differ
diff --git a/doc/helm-figures/helm-type-file.svg b/doc/helm-figures/helm-type-file.svg
new file mode 100644
index 00000000..74215a0b
--- /dev/null
+++ b/doc/helm-figures/helm-type-file.svg
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="411px" preserveAspectRatio="none" style="width:1768px;height:411px;" version="1.1" viewBox="0 0 1768 411" width="1768px" zoomAndPan="magnify"><defs><filter height="300%" id="ff6var1b9e2it" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="768" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="153" x="811.5" y="37.6611">'helm-type-file'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="891" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="891" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="810" y="91.8125"/><ellipse cx="825" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M827.9688,113.4531 Q827.3906,113.75 826.75,113.8906 Q826.1094,114.0469 825.4063,114.0469 Q822.9063,114.0469 821.5781,112.4063 Q820.2656,110.75 820.2656,107.625 Q820.2656,104.5 821.5781,102.8438 Q822.9063,101.1875 825.4063,101.1875 Q826.1094,101.1875 826.75,101.3438 Q827.4063,101.5 827.9688,101.7969 L827.9688,104.5156 Q827.3438,103.9375 826.75,103.6719 Q826.1563,103.3906 825.5313,103.3906 Q824.1875,103.3906 823.5,104.4688 Q822.8125,105.5313 822.8125,107.625 Q822.8125,109.7188 823.5,110.7969 Q824.1875,111.8594 825.5313,111.8594 Q826.1563,111.8594 826.75,111.5938 Q827.3438,111.3125 827.9688,110.7344 L827.9688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="839" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="811" x2="928" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="811" x2="928" y1="131.8125" y2="131.8125"/><!--MD5=[d7d577ca8c64ccce694dba4b3c283648]
+class helm-type-file--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="92.8164" id="helm-type-file" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="788.5" y="199.8125"/><ellipse cx="817.9" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M820.8688,221.4531 Q820.2906,221.75 819.65,221.8906 Q819.0094,222.0469 818.3063,222.0469 Q815.8063,222.0469 814.4781,220.4063 Q813.1656,218.75 813.1656,215.625 Q813.1656,212.5 814.4781,210.8438 Q815.8063,209.1875 818.3063,209.1875 Q819.0094,209.1875 819.65,209.3438 Q820.3063,209.5 820.8688,209.7969 L820.8688,212.5156 Q820.2438,211.9375 819.65,211.6719 Q819.0563,211.3906 818.4313,211.3906 Q817.0875,211.3906 816.4,212.4688 Q815.7125,213.5313 815.7125,215.625 Q815.7125,217.7188 816.4,218.7969 Q817.0875,219.8594 818.4313,219.8594 Q819.0563,219.8594 819.65,219.5938 Q820.2438,219.3125 820.8688,218.7344 L820.8688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="98" x="835.1" y="219.9668">helm-type-file</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="789.5" x2="949.5" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="794.5" y="246.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="21" x="794.5" y="258.8276">file.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="789.5" x2="949.5" y1="265.4219" y2="265.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="789.5" x2="949.5" y1="267.4219" y2="267.4219"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="789.5" x2="806" y1="279.8242" y2="279.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="806" y="283.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="933" x2="949.5" y1="279.8242" y2="279.8242"/><path d="M985.5,218.8125 L985.5,242.3125 L950.62,246.3125 L985.5,250.3125 L985.5,274.2109 A0,0 0 0 0 985.5,274.2109 L1179.5,274.2109 A0,0 0 0 0 1179.5,274.2109 L1179.5,228.8125 L1169.5,218.8125 L985.5,218.8125 A0,0 0 0 0 985.5,218.8125 " fill="#FBFB77" filter="url(#ff6var1b9e2it)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1169.5,218.8125 L1169.5,228.8125 L1179.5,228.8125 L1169.5,218.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="102" x="991.5" y="235.8794">helm-type-file</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="1093.5" y="235.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="173" x="991.5" y="251.0122">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="22" x="991.5" y="266.145">file.</text><!--MD5=[acc538c4de58be324c7884953f9df4c3]
+class helm-mac-spotlight-source--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.5;" width="221" x="6" y="352.8125"/><ellipse cx="21" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,374.4531 Q23.3906,374.75 22.75,374.8906 Q22.1094,375.0469 21.4063,375.0469 Q18.9063,375.0469 17.5781,373.4063 Q16.2656,371.75 16.2656,368.625 Q16.2656,365.5 17.5781,363.8438 Q18.9063,362.1875 21.4063,362.1875 Q22.1094,362.1875 22.75,362.3438 Q23.4063,362.5 23.9688,362.7969 L23.9688,365.5156 Q23.3438,364.9375 22.75,364.6719 Q22.1563,364.3906 21.5313,364.3906 Q20.1875,364.3906 19.5,365.4688 Q18.8125,366.5313 18.8125,368.625 Q18.8125,370.7188 19.5,371.7969 Q20.1875,372.8594 21.5313,372.8594 Q22.1563,372.8594 22.75,372.5938 Q23.3438,372.3125 23.9688,371.7344 L23.9688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="189" x="35" y="372.9668">helm-mac-spotlight-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="226" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="226" y1="392.8125" y2="392.8125"/><!--MD5=[9c6bffcc58873ff705394a767f912448]
+class helm-files-dired-source--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.5;" width="196" x="262.5" y="352.8125"/><ellipse cx="277.5" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M280.4688,374.4531 Q279.8906,374.75 279.25,374.8906 Q278.6094,375.0469 277.9063,375.0469 Q275.4063,375.0469 274.0781,373.4063 Q272.7656,371.75 272.7656,368.625 Q272.7656,365.5 274.0781,363.8438 Q275.4063,362.1875 277.9063,362.1875 Q278.6094,362.1875 279.25,362.3438 Q279.9063,362.5 280.4688,362.7969 L280.4688,365.5156 Q279.8438,364.9375 279.25,364.6719 Q278.6563,364.3906 278.0313,364.3906 Q276.6875,364.3906 276,365.4688 Q275.3125,366.5313 275.3125,368.625 Q275.3125,370.7188 276,371.7969 Q276.6875,372.8594 278.0313,372.8594 Q278.6563,372.8594 279.25,372.5938 Q279.8438,372.3125 280.4688,371.7344 L280.4688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="164" x="291.5" y="372.9668">helm-files-dired-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="263.5" x2="457.5" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="263.5" x2="457.5" y1="392.8125" y2="392.8125"/><!--MD5=[b49d18483e901ae1bf6135ad896f4fad]
+class helm-files-in-current-dir-source--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.5;" width="253" x="494" y="352.8125"/><ellipse cx="509" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M511.9688,374.4531 Q511.3906,374.75 510.75,374.8906 Q510.1094,375.0469 509.4063,375.0469 Q506.9063,375.0469 505.5781,373.4063 Q504.2656,371.75 504.2656,368.625 Q504.2656,365.5 505.5781,363.8438 Q506.9063,362.1875 509.4063,362.1875 Q510.1094,362.1875 510.75,362.3438 Q511.4063,362.5 511.9688,362.7969 L511.9688,365.5156 Q511.3438,364.9375 510.75,364.6719 Q510.1563,364.3906 509.5313,364.3906 Q508.1875,364.3906 507.5,365.4688 Q506.8125,366.5313 506.8125,368.625 Q506.8125,370.7188 507.5,371.7969 Q508.1875,372.8594 509.5313,372.8594 Q510.1563,372.8594 510.75,372.5938 Q511.3438,372.3125 511.9688,371.7344 L511.9688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="221" x="523" y="372.9668">helm-files-in-current-dir-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="495" x2="746" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="495" x2="746" y1="392.8125" y2="392.8125"/><!--MD5=[f9787a7e913788f0fbbca93390d6041a]
+class helm-recentf-source--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-recentf-source" style="stroke: #A80036; stroke-width: 1.5;" width="175" x="782" y="352.8125"/><ellipse cx="797" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M799.9688,374.4531 Q799.3906,374.75 798.75,374.8906 Q798.1094,375.0469 797.4063,375.0469 Q794.9063,375.0469 793.5781,373.4063 Q792.2656,371.75 792.2656,368.625 Q792.2656,365.5 793.5781,363.8438 Q794.9063,362.1875 797.4063,362.1875 Q798.1094,362.1875 798.75,362.3438 Q799.4063,362.5 799.9688,362.7969 L799.9688,365.5156 Q799.3438,364.9375 798.75,364.6719 Q798.1563,364.3906 797.5313,364.3906 Q796.1875,364.3906 795.5,365.4688 Q794.8125,366.5313 794.8125,368.625 Q794.8125,370.7188 795.5,371.7969 Q796.1875,372.8594 797.5313,372.8594 Q798.1563,372.8594 798.75,372.5938 Q799.3438,372.3125 799.9688,371.7344 L799.9688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="143" x="811" y="372.9668">helm-recentf-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="783" x2="956" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="783" x2="956" y1="392.8125" y2="392.8125"/><!--MD5=[11858bbdb8c329cf3bf1e5498cb0b794]
+class helm-file-cache--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-file-cache" style="stroke: #A80036; stroke-width: 1.5;" width="139" x="992" y="352.8125"/><ellipse cx="1007" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1009.9688,374.4531 Q1009.3906,374.75 1008.75,374.8906 Q1008.1094,375.0469 1007.4063,375.0469 Q1004.9063,375.0469 1003.5781,373.4063 Q1002.2656,371.75 1002.2656,368.625 Q1002.2656,365.5 1003.5781,363.8438 Q1004.9063,362.1875 1007.4063,362.1875 Q1008.1094,362.1875 1008.75,362.3438 Q1009.4063,362.5 1009.9688,362.7969 L1009.9688,365.5156 Q1009.3438,364.9375 1008.75,364.6719 Q1008.1563,364.3906 1007.5313,364.3906 Q1006.1875,364.3906 1005.5,365.4688 Q1004.8125,366.5313 1004.8125,368.625 Q1004.8125,370.7188 1005.5,371.7969 Q1006.1875,372.8594 1007.5313,372.8594 Q1008.1563,372.8594 1008.75,372.5938 Q1009.3438,372.3125 1009.9688,371.7344 L1009.9688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="107" x="1021" y="372.9668">helm-file-cache</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="993" x2="1130" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="993" x2="1130" y1="392.8125" y2="392.8125"/><!--MD5=[473c7582700aad271b06bfe20c99b25e]
+class helm-browse-project-override-inheritor--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="310" x="1166.5" y="352.8125"/><ellipse cx="1181.5" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1184.4688,374.4531 Q1183.8906,374.75 1183.25,374.8906 Q1182.6094,375.0469 1181.9063,375.0469 Q1179.4063,375.0469 1178.0781,373.4063 Q1176.7656,371.75 1176.7656,368.625 Q1176.7656,365.5 1178.0781,363.8438 Q1179.4063,362.1875 1181.9063,362.1875 Q1182.6094,362.1875 1183.25,362.3438 Q1183.9063,362.5 1184.4688,362.7969 L1184.4688,365.5156 Q1183.8438,364.9375 1183.25,364.6719 Q1182.6563,364.3906 1182.0313,364.3906 Q1180.6875,364.3906 1180,365.4688 Q1179.3125,366.5313 1179.3125,368.625 Q1179.3125,370.7188 1180,371.7969 Q1180.6875,372.8594 1182.0313,372.8594 Q1182.6563,372.8594 1183.25,372.5938 Q1183.8438,372.3125 1184.4688,371.7344 L1184.4688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="278" x="1195.5" y="372.9668">helm-browse-project-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1167.5" x2="1475.5" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1167.5" x2="1475.5" y1="392.8125" y2="392.8125"/><!--MD5=[2e3d3b2922e1daf59c103872c87a469e]
+class helm-locate-override-inheritor--><rect fill="#FEFECE" filter="url(#ff6var1b9e2it)" height="48" id="helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.5;" width="246" x="1511.5" y="352.8125"/><ellipse cx="1526.5" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M1529.4688,374.4531 Q1528.8906,374.75 1528.25,374.8906 Q1527.6094,375.0469 1526.9063,375.0469 Q1524.4063,375.0469 1523.0781,373.4063 Q1521.7656,371.75 1521.7656,368.625 Q1521.7656,365.5 1523.0781,363.8438 Q1524.4063,362.1875 1526.9063,362.1875 Q1527.6094,362.1875 1528.25,362.3438 Q1528.9063,362.5 1529.4688,362.7969 L1529.4688,365.5156 Q1528.8438,364.9375 1528.25,364.6719 Q1527.6563,364.3906 1527.0313,364.3906 Q1525.6875,364.3906 1525,365.4688 Q1524.3125,366.5313 1524.3125,368.625 Q1524.3125,370.7188 1525,371.7969 Q1525.6875,372.8594 1527.0313,372.8594 Q1527.6563,372.8594 1528.25,372.5938 Q1528.8438,372.3125 1529.4688,371.7344 L1529.4688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="214" x="1540.5" y="372.9668">helm-locate-override-inheritor</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="1512.5" x2="1756.5" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="1512.5" x2="1756.5" y1="392.8125" y2="392.8125"/><!--MD5=[4dcf8b063d240b570d0bdaa319fd46e4]
+reverse link helm-source to helm-type-file--><path d="M869.5,160.4125 C869.5,173.0325 869.5,186.8425 869.5,199.5825 " fill="none" id="helm-source&lt;-helm-type-file" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="862.5,160.0825,869.5,140.0825,876.5,160.0825,862.5,160.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[a474bc848475b2374c1d2bb84f271e9b]
+reverse link helm-type-file to helm-mac-spotlight-source--><path d="M768.27,264.0625 C644.62,284.6025 429.09,320.6525 244.5,352.8125 C238.83,353.8025 233.02,354.8225 227.15,355.8525 " fill="none" id="helm-type-file&lt;-helm-mac-spotlight-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="767.17,257.1525,788.05,260.7825,769.47,270.9625,767.17,257.1525" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[05800070c5d625a950fe67b1123c2019]
+reverse link helm-type-file to helm-files-dired-source--><path d="M768.7,272.7625 C676.38,296.0625 540.92,330.2625 451.74,352.7825 " fill="none" id="helm-type-file&lt;-helm-files-dired-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="767.18,265.9225,788.28,267.8125,770.61,279.5025,767.18,265.9225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[3570d02ac558741aaeedfaae7abb82a0]
+reverse link helm-type-file to helm-files-in-current-dir-source--><path d="M770.21,298.5525 C733.86,317.3125 694.51,337.6125 665.29,352.7025 " fill="none" id="helm-type-file&lt;-helm-files-in-current-dir-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="767.33,292.1625,788.31,289.2125,773.75,304.6025,767.33,292.1625" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[c214b1996ffa22e8ee90459314819dd7]
+reverse link helm-type-file to helm-recentf-source--><path d="M869.5,313.4125 C869.5,327.5125 869.5,341.5025 869.5,352.6425 " fill="none" id="helm-type-file&lt;-helm-recentf-source" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="862.5,312.9825,869.5,292.9825,876.5,312.9825,862.5,312.9825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[20fb0892ad389f5d9224faeaf3fbf8f9]
+reverse link helm-type-file to helm-file-cache--><path d="M954.68,304.3225 C980.15,321.3625 1006.65,339.1025 1026.88,352.6425 " fill="none" id="helm-type-file&lt;-helm-file-cache" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="950.46,309.9225,937.73,292.9825,958.25,298.2825,950.46,309.9225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[7dce46f1711674df8238e0c6e8679f53]
+reverse link helm-type-file to helm-browse-project-override-inheritor--><path d="M969.6,292.6425 C1054.4,321.0625 1132.88,339.5825 1196.44,352.7625 " fill="none" id="helm-type-file&lt;-helm-browse-project-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="967.21,299.2225,950.55,286.1225,971.74,285.9725,967.21,299.2225" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[ea3943677655752665563907a8ed1189]
+reverse link helm-type-file to helm-locate-override-inheritor--><path d="M969.9,292.3625 C1198.81,354.2025 1267.71,321.2725 1494.5,352.8125 C1499.99,353.5725 1505.59,354.3825 1511.25,355.2225 " fill="none" id="helm-type-file&lt;-helm-locate-override-inheritor" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="967.99,299.0925,950.58,287.0225,971.72,285.6025,967.99,299.0925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f161b674adc892f9bea226323700e36f]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-file'**\n\n
+"helm-source" <|- - "helm-type-file"
+class "helm-source"
+class "helm-type-file" {
+ A class to define helm type
+ file.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-file"
+ **helm-type-file**:
+ A class to define helm type
+ file.
+end note
+"helm-type-file" <|- - "helm-mac-spotlight-source"
+"helm-type-file" <|- - "helm-files-dired-source"
+"helm-type-file" <|- - "helm-files-in-current-dir-source"
+"helm-type-file" <|- - "helm-recentf-source"
+"helm-type-file" <|- - "helm-file-cache"
+"helm-type-file" <|- - "helm-browse-project-override-inheritor"
+"helm-type-file" <|- - "helm-locate-override-inheritor"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-type-function.png b/doc/helm-figures/helm-type-function.png
new file mode 100644
index 00000000..6ea89caf
--- /dev/null
+++ b/doc/helm-figures/helm-type-function.png
Binary files differ
diff --git a/doc/helm-figures/helm-type-function.svg b/doc/helm-figures/helm-type-function.svg
new file mode 100644
index 00000000..8610e22a
--- /dev/null
+++ b/doc/helm-figures/helm-type-function.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="303px" preserveAspectRatio="none" style="width:413px;height:303px;" version="1.1" viewBox="0 0 413 303" width="413px" zoomAndPan="magnify"><defs><filter height="300%" id="f1mjft7fad5upw" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="89.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="206" x="106.5" y="37.6611">'helm-type-function'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="212.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="212.5" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#f1mjft7fad5upw)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="29.5" y="91.8125"/><ellipse cx="44.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M47.4688,113.4531 Q46.8906,113.75 46.25,113.8906 Q45.6094,114.0469 44.9063,114.0469 Q42.4063,114.0469 41.0781,112.4063 Q39.7656,110.75 39.7656,107.625 Q39.7656,104.5 41.0781,102.8438 Q42.4063,101.1875 44.9063,101.1875 Q45.6094,101.1875 46.25,101.3438 Q46.9063,101.5 47.4688,101.7969 L47.4688,104.5156 Q46.8438,103.9375 46.25,103.6719 Q45.6563,103.3906 45.0313,103.3906 Q43.6875,103.3906 43,104.4688 Q42.3125,105.5313 42.3125,107.625 Q42.3125,109.7188 43,110.7969 Q43.6875,111.8594 45.0313,111.8594 Q45.6563,111.8594 46.25,111.5938 Q46.8438,111.3125 47.4688,110.7344 L47.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="58.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="30.5" x2="147.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="30.5" x2="147.5" y1="131.8125" y2="131.8125"/><!--MD5=[e7e10cea49efd04a6bea9ed9f44f1841]
+class helm-type-function--><rect fill="#FEFECE" filter="url(#f1mjft7fad5upw)" height="92.8164" id="helm-type-function" style="stroke: #A80036; stroke-width: 1.5;" width="166" x="6" y="199.8125"/><ellipse cx="21" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,221.4531 Q23.3906,221.75 22.75,221.8906 Q22.1094,222.0469 21.4063,222.0469 Q18.9063,222.0469 17.5781,220.4063 Q16.2656,218.75 16.2656,215.625 Q16.2656,212.5 17.5781,210.8438 Q18.9063,209.1875 21.4063,209.1875 Q22.1094,209.1875 22.75,209.3438 Q23.4063,209.5 23.9688,209.7969 L23.9688,212.5156 Q23.3438,211.9375 22.75,211.6719 Q22.1563,211.3906 21.5313,211.3906 Q20.1875,211.3906 19.5,212.4688 Q18.8125,213.5313 18.8125,215.625 Q18.8125,217.7188 19.5,218.7969 Q20.1875,219.8594 21.5313,219.8594 Q22.1563,219.8594 22.75,219.5938 Q23.3438,219.3125 23.9688,218.7344 L23.9688,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="134" x="35" y="219.9668">helm-type-function</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="171" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="12" y="246.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="49" x="12" y="258.8276">function.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="171" y1="265.4219" y2="265.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="7" x2="171" y1="267.4219" y2="267.4219"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="25.5" y1="279.8242" y2="279.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="25.5" y="283.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="152.5" x2="171" y1="279.8242" y2="279.8242"/><path d="M207,218.8125 L207,242.3125 L172.14,246.3125 L207,250.3125 L207,274.2109 A0,0 0 0 0 207,274.2109 L401,274.2109 A0,0 0 0 0 401,274.2109 L401,228.8125 L391,218.8125 L207,218.8125 A0,0 0 0 0 207,218.8125 " fill="#FBFB77" filter="url(#f1mjft7fad5upw)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M391,218.8125 L391,228.8125 L401,228.8125 L391,218.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="139" x="213" y="235.8794">helm-type-function</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="352" y="235.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="173" x="213" y="251.0122">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="55" x="213" y="266.145">function.</text><!--MD5=[cb8c671e8f25dea26b71b20786c595d4]
+reverse link helm-source to helm-type-function--><path d="M89,160.4125 C89,173.0325 89,186.8425 89,199.5825 " fill="none" id="helm-source&lt;-helm-type-function" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="82,160.0825,89,140.0825,96,160.0825,82,160.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[41647364c12015674602e36cc85d91a6]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-function'**\n\n
+"helm-source" <|- - "helm-type-function"
+class "helm-source"
+class "helm-type-function" {
+ A class to define helm type
+ function.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-function"
+ **helm-type-function**:
+ A class to define helm type
+ function.
+end note
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-figures/helm-type-timers.png b/doc/helm-figures/helm-type-timers.png
new file mode 100644
index 00000000..e7c3794a
--- /dev/null
+++ b/doc/helm-figures/helm-type-timers.png
Binary files differ
diff --git a/doc/helm-figures/helm-type-timers.svg b/doc/helm-figures/helm-type-timers.svg
new file mode 100644
index 00000000..6acd471b
--- /dev/null
+++ b/doc/helm-figures/helm-type-timers.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="411px" preserveAspectRatio="none" style="width:579px;height:411px;" version="1.1" viewBox="0 0 579 411" width="579px" zoomAndPan="magnify"><defs><filter height="300%" id="fi9dpor0vd2ar" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="240" x="172.5" y="16.708">Parents and Children of</text><text fill="#000000" font-family="sans-serif" font-size="18" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="186" x="199.5" y="37.6611">'helm-type-timers'</text><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="295.5" y="58.6143"/><text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="0" x="295.5" y="79.5674"/><!--MD5=[8da85e6ec6935d54267014e974a66b51]
+class helm-source--><rect fill="#FEFECE" filter="url(#fi9dpor0vd2ar)" height="48" id="helm-source" style="stroke: #A80036; stroke-width: 1.5;" width="119" x="197.5" y="91.8125"/><ellipse cx="212.5" cy="107.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M215.4688,113.4531 Q214.8906,113.75 214.25,113.8906 Q213.6094,114.0469 212.9063,114.0469 Q210.4063,114.0469 209.0781,112.4063 Q207.7656,110.75 207.7656,107.625 Q207.7656,104.5 209.0781,102.8438 Q210.4063,101.1875 212.9063,101.1875 Q213.6094,101.1875 214.25,101.3438 Q214.9063,101.5 215.4688,101.7969 L215.4688,104.5156 Q214.8438,103.9375 214.25,103.6719 Q213.6563,103.3906 213.0313,103.3906 Q211.6875,103.3906 211,104.4688 Q210.3125,105.5313 210.3125,107.625 Q210.3125,109.7188 211,110.7969 Q211.6875,111.8594 213.0313,111.8594 Q213.6563,111.8594 214.25,111.5938 Q214.8438,111.3125 215.4688,110.7344 L215.4688,113.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="87" x="226.5" y="111.9668">helm-source</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="315.5" y1="123.8125" y2="123.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="198.5" x2="315.5" y1="131.8125" y2="131.8125"/><!--MD5=[d89fbe3a66aa0ad58442d3fbb0e3c04d]
+class helm-type-timers--><rect fill="#FEFECE" filter="url(#fi9dpor0vd2ar)" height="92.8164" id="helm-type-timers" style="stroke: #A80036; stroke-width: 1.5;" width="162" x="176" y="199.8125"/><ellipse cx="195.05" cy="215.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M198.0188,221.4531 Q197.4406,221.75 196.8,221.8906 Q196.1594,222.0469 195.4563,222.0469 Q192.9563,222.0469 191.6281,220.4063 Q190.3156,218.75 190.3156,215.625 Q190.3156,212.5 191.6281,210.8438 Q192.9563,209.1875 195.4563,209.1875 Q196.1594,209.1875 196.8,209.3438 Q197.4563,209.5 198.0188,209.7969 L198.0188,212.5156 Q197.3938,211.9375 196.8,211.6719 Q196.2063,211.3906 195.5813,211.3906 Q194.2375,211.3906 193.55,212.4688 Q192.8625,213.5313 192.8625,215.625 Q192.8625,217.7188 193.55,218.7969 Q194.2375,219.8594 195.5813,219.8594 Q196.2063,219.8594 196.8,219.5938 Q197.3938,219.3125 198.0188,218.7344 L198.0188,221.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="209.95" y="219.9668">helm-type-timers</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="177" x2="337" y1="231.8125" y2="231.8125"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="150" x="182" y="246.0229">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="41" x="182" y="258.8276">timers.</text><line style="stroke: #A80036; stroke-width: 1.0;" x1="177" x2="337" y1="265.4219" y2="265.4219"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="177" x2="337" y1="267.4219" y2="267.4219"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="177" x2="193.5" y1="279.8242" y2="279.8242"/><text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="193.5" y="283.1323">some interesting slots</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="320.5" x2="337" y1="279.8242" y2="279.8242"/><path d="M373,218.8125 L373,242.3125 L338.12,246.3125 L373,250.3125 L373,274.2109 A0,0 0 0 0 373,274.2109 L567,274.2109 A0,0 0 0 0 567,274.2109 L567,228.8125 L557,218.8125 L373,218.8125 A0,0 0 0 0 373,218.8125 " fill="#FBFB77" filter="url(#fi9dpor0vd2ar)" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M557,218.8125 L557,228.8125 L567,228.8125 L557,218.8125 " fill="#FBFB77" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="126" x="379" y="235.8794">helm-type-timers</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="4" x="505" y="235.8794">:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="173" x="379" y="251.0122">A class to define helm type</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="45" x="379" y="266.145">timers.</text><!--MD5=[65c9e2a5e033ac2de329b35010304c74]
+class helm-idle-time-timers-class--><rect fill="#FEFECE" filter="url(#fi9dpor0vd2ar)" height="48" id="helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="224" x="6" y="352.8125"/><ellipse cx="21" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M23.9688,374.4531 Q23.3906,374.75 22.75,374.8906 Q22.1094,375.0469 21.4063,375.0469 Q18.9063,375.0469 17.5781,373.4063 Q16.2656,371.75 16.2656,368.625 Q16.2656,365.5 17.5781,363.8438 Q18.9063,362.1875 21.4063,362.1875 Q22.1094,362.1875 22.75,362.3438 Q23.4063,362.5 23.9688,362.7969 L23.9688,365.5156 Q23.3438,364.9375 22.75,364.6719 Q22.1563,364.3906 21.5313,364.3906 Q20.1875,364.3906 19.5,365.4688 Q18.8125,366.5313 18.8125,368.625 Q18.8125,370.7188 19.5,371.7969 Q20.1875,372.8594 21.5313,372.8594 Q22.1563,372.8594 22.75,372.5938 Q23.3438,372.3125 23.9688,371.7344 L23.9688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="192" x="35" y="372.9668">helm-idle-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="229" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="229" y1="392.8125" y2="392.8125"/><!--MD5=[b0e60113aba2bebbe59d6cbba30a4a7f]
+class helm-absolute-time-timers-class--><rect fill="#FEFECE" filter="url(#fi9dpor0vd2ar)" height="48" id="helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.5;" width="261" x="265.5" y="352.8125"/><ellipse cx="280.5" cy="368.8125" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;"/><path d="M283.4688,374.4531 Q282.8906,374.75 282.25,374.8906 Q281.6094,375.0469 280.9063,375.0469 Q278.4063,375.0469 277.0781,373.4063 Q275.7656,371.75 275.7656,368.625 Q275.7656,365.5 277.0781,363.8438 Q278.4063,362.1875 280.9063,362.1875 Q281.6094,362.1875 282.25,362.3438 Q282.9063,362.5 283.4688,362.7969 L283.4688,365.5156 Q282.8438,364.9375 282.25,364.6719 Q281.6563,364.3906 281.0313,364.3906 Q279.6875,364.3906 279,365.4688 Q278.3125,366.5313 278.3125,368.625 Q278.3125,370.7188 279,371.7969 Q279.6875,372.8594 281.0313,372.8594 Q281.6563,372.8594 282.25,372.5938 Q282.8438,372.3125 283.4688,371.7344 L283.4688,374.4531 Z "/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="229" x="294.5" y="372.9668">helm-absolute-time-timers-class</text><line style="stroke: #A80036; stroke-width: 1.5;" x1="266.5" x2="525.5" y1="384.8125" y2="384.8125"/><line style="stroke: #A80036; stroke-width: 1.5;" x1="266.5" x2="525.5" y1="392.8125" y2="392.8125"/><!--MD5=[687fc8ec140e945488f732dae3c46e2b]
+reverse link helm-source to helm-type-timers--><path d="M257,160.4125 C257,173.0325 257,186.8425 257,199.5825 " fill="none" id="helm-source&lt;-helm-type-timers" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="250,160.0825,257,140.0825,264,160.0825,250,160.0825" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[f7040a49218bb3669d1c90cd85142f6d]
+reverse link helm-type-timers to helm-idle-time-timers-class--><path d="M192.68,306.7725 C175.07,323.0525 157.01,339.7525 143.06,352.6425 " fill="none" id="helm-type-timers&lt;-helm-idle-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="188.16,301.4125,207.6,292.9825,197.67,311.6925,188.16,301.4125" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[69966f233324ab1b41ca6bc5703528d7]
+reverse link helm-type-timers to helm-absolute-time-timers-class--><path d="M321.32,306.7725 C338.93,323.0525 356.99,339.7525 370.94,352.6425 " fill="none" id="helm-type-timers&lt;-helm-absolute-time-timers-class" style="stroke: #A80036; stroke-width: 1.0;"/><polygon fill="none" points="316.33,311.6925,306.4,292.9825,325.84,301.4125,316.33,311.6925" style="stroke: #A80036; stroke-width: 1.0;"/><!--MD5=[d3375284f3586b03537d153f4c9a45f6]
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-timers'**\n\n
+"helm-source" <|- - "helm-type-timers"
+class "helm-source"
+class "helm-type-timers" {
+ A class to define helm type
+ timers.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-timers"
+ **helm-type-timers**:
+ A class to define helm type
+ timers.
+end note
+"helm-type-timers" <|- - "helm-idle-time-timers-class"
+"helm-type-timers" <|- - "helm-absolute-time-timers-class"
+@enduml
+
+PlantUML version 1.2020.02(Sun Mar 01 15:52:07 IST 2020)
+(GPL source distribution)
+Java Runtime: OpenJDK Runtime Environment
+JVM: OpenJDK 64-Bit Server VM
+Java Version: 11.0.11-ea+8-post-Debian-1
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: IN
+--></g></svg> \ No newline at end of file
diff --git a/doc/helm-file-cache.plantuml b/doc/helm-file-cache.plantuml
new file mode 100644
index 00000000..a48f33db
--- /dev/null
+++ b/doc/helm-file-cache.plantuml
@@ -0,0 +1,28 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-file-cache'**\n\n
+"helm-source-in-buffer" <|-- "helm-file-cache"
+"helm-type-file" <|-- "helm-file-cache"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-file-cache" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-file-cache"
+ **helm-file-cache**
+end note
+@enduml
diff --git a/doc/helm-files-dired-source.plantuml b/doc/helm-files-dired-source.plantuml
new file mode 100644
index 00000000..89ab14c5
--- /dev/null
+++ b/doc/helm-files-dired-source.plantuml
@@ -0,0 +1,23 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-files-dired-source'**\n\n
+"helm-source-sync" <|-- "helm-files-dired-source"
+"helm-type-file" <|-- "helm-files-dired-source"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-files-dired-source" {
+ __ some interesting slots __
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-files-dired-source"
+ **helm-files-dired-source**
+end note
+@enduml
diff --git a/doc/helm-files-in-current-dir-source.plantuml b/doc/helm-files-in-current-dir-source.plantuml
new file mode 100644
index 00000000..da5e4f2b
--- /dev/null
+++ b/doc/helm-files-in-current-dir-source.plantuml
@@ -0,0 +1,26 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-files-in-current-dir-source'**\n\n
+"helm-source-sync" <|-- "helm-files-in-current-dir-source"
+"helm-type-file" <|-- "helm-files-in-current-dir-source"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-files-in-current-dir-source" {
+ __ some interesting slots __
+ candidates
+ fuzzy-match
+ match-dynamic
+ match-part
+ match-strict
+ migemo
+ pattern-transformer
+}
+note right of "helm-files-in-current-dir-source"
+ **helm-files-in-current-dir-source**
+end note
+@enduml
diff --git a/doc/helm-gid-source.plantuml b/doc/helm-gid-source.plantuml
new file mode 100644
index 00000000..f5958d13
--- /dev/null
+++ b/doc/helm-gid-source.plantuml
@@ -0,0 +1,26 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-gid-source'**\n\n
+"helm-source-async" <|-- "helm-gid-source"
+class "helm-source-async"
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-gid-source" {
+ __ some interesting slots __
+ action
+ candidate-number-limit
+ candidates-process
+ db-dir
+ filtered-candidate-transformer
+ header-name
+ help-message
+ history
+ nohighlight
+ persistent-action
+ requires-pattern
+}
+note right of "helm-gid-source"
+ **helm-gid-source**
+end note
+@enduml
diff --git a/doc/helm-grep-ag-class.plantuml b/doc/helm-grep-ag-class.plantuml
new file mode 100644
index 00000000..32d98715
--- /dev/null
+++ b/doc/helm-grep-ag-class.plantuml
@@ -0,0 +1,28 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-grep-ag-class'**\n\n
+"helm-source-async" <|-- "helm-grep-ag-class"
+class "helm-source-async"
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-grep-ag-class" {
+ __ some interesting slots __
+ action
+ candidate-number-limit
+ filtered-candidate-transformer
+ group
+ help-message
+ history
+ keymap
+ nohighlight
+ nomark
+ pcre
+ persistent-action
+ persistent-help
+ requires-pattern
+}
+note right of "helm-grep-ag-class"
+ **helm-grep-ag-class**
+end note
+@enduml
diff --git a/doc/helm-grep-class.plantuml b/doc/helm-grep-class.plantuml
new file mode 100644
index 00000000..17bf4759
--- /dev/null
+++ b/doc/helm-grep-class.plantuml
@@ -0,0 +1,32 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-grep-class'**\n\n
+"helm-source-async" <|-- "helm-grep-class"
+class "helm-source-async"
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-grep-class" {
+ __ some interesting slots __
+ action
+ after-init-hook
+ backend
+ before-init-hook
+ candidate-number-limit
+ candidates-process
+ filtered-candidate-transformer
+ group
+ help-message
+ history
+ keymap
+ nohighlight
+ nomark
+ pcre
+ persistent-action
+ persistent-help
+ requires-pattern
+}
+note right of "helm-grep-class"
+ **helm-grep-class**
+end note
+@enduml
diff --git a/doc/helm-idle-time-timers-class.plantuml b/doc/helm-idle-time-timers-class.plantuml
new file mode 100644
index 00000000..388c72d2
--- /dev/null
+++ b/doc/helm-idle-time-timers-class.plantuml
@@ -0,0 +1,25 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-idle-time-timers-class'**\n\n
+"helm-source-sync" <|-- "helm-idle-time-timers-class"
+"helm-type-timers" <|-- "helm-idle-time-timers-class"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-timers"
+"helm-source" <|-- "helm-type-timers"
+class "helm-source"
+class "helm-idle-time-timers-class" {
+ __ some interesting slots __
+ allow-dups
+ candidate-transformer
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-idle-time-timers-class"
+ **helm-idle-time-timers-class**
+end note
+@enduml
diff --git a/doc/helm-imenu-source.plantuml b/doc/helm-imenu-source.plantuml
new file mode 100644
index 00000000..02805ffa
--- /dev/null
+++ b/doc/helm-imenu-source.plantuml
@@ -0,0 +1,24 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-imenu-source'**\n\n
+"helm-source-sync" <|-- "helm-imenu-source"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-imenu-source" {
+ __ some interesting slots __
+ action
+ candidate-transformer
+ candidates
+ group
+ help-message
+ keymap
+ nomark
+ persistent-action
+ persistent-help
+}
+note right of "helm-imenu-source"
+ **helm-imenu-source**
+end note
+@enduml
diff --git a/doc/helm-info-source.plantuml b/doc/helm-info-source.plantuml
new file mode 100644
index 00000000..1635bd30
--- /dev/null
+++ b/doc/helm-info-source.plantuml
@@ -0,0 +1,20 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-info-source'**\n\n
+"helm-source-in-buffer" <|-- "helm-info-source"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-info-source" {
+ __ some interesting slots __
+ init
+ action
+ display-to-real
+ get-line
+ info-file
+}
+note right of "helm-info-source"
+ **helm-info-source**
+end note
+@enduml
diff --git a/doc/helm-list-el-package-source.plantuml b/doc/helm-list-el-package-source.plantuml
new file mode 100644
index 00000000..598b2e8d
--- /dev/null
+++ b/doc/helm-list-el-package-source.plantuml
@@ -0,0 +1,25 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-list-el-package-source'**\n\n
+"helm-source-in-buffer" <|-- "helm-list-el-package-source"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-list-el-package-source" {
+ __ some interesting slots __
+ init
+ action
+ action-transformer
+ candidate-number-limit
+ filtered-candidate-transformer
+ get-line
+ group
+ help-message
+ keymap
+ update
+}
+note right of "helm-list-el-package-source"
+ **helm-list-el-package-source**
+end note
+@enduml
diff --git a/doc/helm-locate-override-inheritor.plantuml b/doc/helm-locate-override-inheritor.plantuml
new file mode 100644
index 00000000..61d74f96
--- /dev/null
+++ b/doc/helm-locate-override-inheritor.plantuml
@@ -0,0 +1,16 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-locate-override-inheritor'**\n\n
+"helm-type-file" <|-- "helm-locate-override-inheritor"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-locate-override-inheritor" {
+ __ some interesting slots __
+}
+note right of "helm-locate-override-inheritor"
+ **helm-locate-override-inheritor**
+end note
+"helm-locate-override-inheritor" <|-- "helm-locate-source"
+@enduml
diff --git a/doc/helm-locate-source.plantuml b/doc/helm-locate-source.plantuml
new file mode 100644
index 00000000..333fe4dd
--- /dev/null
+++ b/doc/helm-locate-source.plantuml
@@ -0,0 +1,30 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-locate-source'**\n\n
+"helm-source-async" <|-- "helm-locate-source"
+"helm-locate-override-inheritor" <|-- "helm-locate-source"
+class "helm-source-async"
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-locate-override-inheritor"
+"helm-type-file" <|-- "helm-locate-override-inheritor"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-locate-source" {
+ __ some interesting slots __
+ init
+ candidate-number-limit
+ candidates-process
+ group
+ history
+ multimatch
+ persistent-action
+ redisplay
+ requires-pattern
+}
+note right of "helm-locate-source"
+ **helm-locate-source**
+end note
+@enduml
diff --git a/doc/helm-locate-subdirs-source.plantuml b/doc/helm-locate-subdirs-source.plantuml
new file mode 100644
index 00000000..47d7bb92
--- /dev/null
+++ b/doc/helm-locate-subdirs-source.plantuml
@@ -0,0 +1,19 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-locate-subdirs-source'**\n\n
+"helm-source-in-buffer" <|-- "helm-locate-subdirs-source"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-locate-subdirs-source" {
+ __ some interesting slots __
+ basedir
+ data
+ group
+ subdir
+}
+note right of "helm-locate-subdirs-source"
+ **helm-locate-subdirs-source**
+end note
+@enduml
diff --git a/doc/helm-mac-spotlight-source.plantuml b/doc/helm-mac-spotlight-source.plantuml
new file mode 100644
index 00000000..59a4033a
--- /dev/null
+++ b/doc/helm-mac-spotlight-source.plantuml
@@ -0,0 +1,22 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-mac-spotlight-source'**\n\n
+"helm-source-async" <|-- "helm-mac-spotlight-source"
+"helm-type-file" <|-- "helm-mac-spotlight-source"
+class "helm-source-async"
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-mac-spotlight-source" {
+ __ some interesting slots __
+ candidates-process
+ multimatch
+ requires-pattern
+}
+note right of "helm-mac-spotlight-source"
+ **helm-mac-spotlight-source**
+end note
+@enduml
diff --git a/doc/helm-moccur-class.plantuml b/doc/helm-moccur-class.plantuml
new file mode 100644
index 00000000..017a3741
--- /dev/null
+++ b/doc/helm-moccur-class.plantuml
@@ -0,0 +1,17 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-moccur-class'**\n\n
+"helm-source-in-buffer" <|-- "helm-moccur-class"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-moccur-class" {
+ __ some interesting slots __
+ buffer-name
+ moccur-buffers
+}
+note right of "helm-moccur-class"
+ **helm-moccur-class**
+end note
+@enduml
diff --git a/doc/helm-recentf-source.plantuml b/doc/helm-recentf-source.plantuml
new file mode 100644
index 00000000..d35199b9
--- /dev/null
+++ b/doc/helm-recentf-source.plantuml
@@ -0,0 +1,27 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-recentf-source'**\n\n
+"helm-source-sync" <|-- "helm-recentf-source"
+"helm-type-file" <|-- "helm-recentf-source"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-file"
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-recentf-source" {
+ __ some interesting slots __
+ init
+ candidates
+ match-dynamic
+ match-part
+ match-strict
+ migemo
+ pattern-transformer
+ persistent-action
+}
+note right of "helm-recentf-source"
+ **helm-recentf-source**
+end note
+@enduml
diff --git a/doc/helm-semantic-source.plantuml b/doc/helm-semantic-source.plantuml
new file mode 100644
index 00000000..49ccd50b
--- /dev/null
+++ b/doc/helm-semantic-source.plantuml
@@ -0,0 +1,22 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-semantic-source'**\n\n
+"helm-source-in-buffer" <|-- "helm-semantic-source"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-semantic-source" {
+ __ some interesting slots __
+ init
+ action
+ get-line
+ help-message
+ keymap
+ persistent-action
+ persistent-help
+}
+note right of "helm-semantic-source"
+ **helm-semantic-source**
+end note
+@enduml
diff --git a/doc/helm-source-async.plantuml b/doc/helm-source-async.plantuml
new file mode 100644
index 00000000..f3b85115
--- /dev/null
+++ b/doc/helm-source-async.plantuml
@@ -0,0 +1,28 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-async'**\n\n
+"helm-source" <|-- "helm-source-async"
+class "helm-source"
+class "helm-source-async" {
+ Use this class to define a
+ helm source calling an
+ external process.
+ ==
+ __ some interesting slots __
+ candidates-process
+ multimatch
+}
+note right of "helm-source-async"
+ **helm-source-async**:
+ Use this class to define a
+ helm source calling an
+ external process.
+end note
+"helm-source-async" <|-- "helm-mac-spotlight-source"
+"helm-source-async" <|-- "helm-gid-source"
+"helm-source-async" <|-- "helm-fd-class"
+"helm-source-async" <|-- "helm-locate-source"
+"helm-source-async" <|-- "helm-grep-ag-class"
+"helm-source-async" <|-- "helm-grep-class"
+@enduml
diff --git a/doc/helm-source-basic-bookmarks.plantuml b/doc/helm-source-basic-bookmarks.plantuml
new file mode 100644
index 00000000..3b6ad6c1
--- /dev/null
+++ b/doc/helm-source-basic-bookmarks.plantuml
@@ -0,0 +1,29 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-basic-bookmarks'**\n\n
+"helm-source-in-buffer" <|-- "helm-source-basic-bookmarks"
+"helm-type-bookmark" <|-- "helm-source-basic-bookmarks"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-bookmark"
+"helm-source" <|-- "helm-type-bookmark"
+class "helm-source"
+class "helm-source-basic-bookmarks" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filtered-candidate-transformer
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-source-basic-bookmarks"
+ **helm-source-basic-bookmarks**
+end note
+@enduml
diff --git a/doc/helm-source-buffers.plantuml b/doc/helm-source-buffers.plantuml
new file mode 100644
index 00000000..4d27206a
--- /dev/null
+++ b/doc/helm-source-buffers.plantuml
@@ -0,0 +1,33 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-buffers'**\n\n
+"helm-source-sync" <|-- "helm-source-buffers"
+"helm-type-buffer" <|-- "helm-source-buffers"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-type-buffer"
+"helm-source" <|-- "helm-type-buffer"
+class "helm-source"
+class "helm-source-buffers" {
+ __ some interesting slots __
+ init
+ buffer-list
+ candidates
+ help-message
+ keymap
+ match
+ match-dynamic
+ match-strict
+ migemo
+ multimatch
+ nohighlight
+ persistent-action
+ resume
+ volatile
+}
+note right of "helm-source-buffers"
+ **helm-source-buffers**
+end note
+@enduml
diff --git a/doc/helm-source-dummy.plantuml b/doc/helm-source-dummy.plantuml
new file mode 100644
index 00000000..34297759
--- /dev/null
+++ b/doc/helm-source-dummy.plantuml
@@ -0,0 +1,19 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-dummy'**\n\n
+"helm-source" <|-- "helm-source-dummy"
+class "helm-source"
+class "helm-source-dummy" {
+ __ some interesting slots __
+ accept-empty
+ candidates
+ filtered-candidate-transformer
+ match
+ multimatch
+ volatile
+}
+note right of "helm-source-dummy"
+ **helm-source-dummy**
+end note
+@enduml
diff --git a/doc/helm-source-ffiles.plantuml b/doc/helm-source-ffiles.plantuml
new file mode 100644
index 00000000..86124a68
--- /dev/null
+++ b/doc/helm-source-ffiles.plantuml
@@ -0,0 +1,36 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-ffiles'**\n\n
+"helm-source-sync" <|-- "helm-source-ffiles"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-source-ffiles" {
+ __ some interesting slots __
+ init
+ action
+ action-transformer
+ after-init-hook
+ before-init-hook
+ candidate-number-limit
+ candidates
+ cleanup
+ filtered-candidate-transformer
+ group
+ header-name
+ help-message
+ keymap
+ match-on-real
+ migemo
+ mode-line
+ nohighlight
+ persistent-action-if
+ persistent-help
+ update
+ volatile
+}
+note right of "helm-source-ffiles"
+ **helm-source-ffiles**
+end note
+@enduml
diff --git a/doc/helm-source-filtered-bookmarks.plantuml b/doc/helm-source-filtered-bookmarks.plantuml
new file mode 100644
index 00000000..df289fc7
--- /dev/null
+++ b/doc/helm-source-filtered-bookmarks.plantuml
@@ -0,0 +1,30 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-filtered-bookmarks'**\n\n
+"helm-source-in-buffer" <|-- "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|-- "helm-source-filtered-bookmarks"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-type-bookmark"
+"helm-source" <|-- "helm-type-bookmark"
+class "helm-source"
+class "helm-source-filtered-bookmarks" {
+ __ some interesting slots __
+ init
+ candidates
+ data
+ filtered-candidate-transformer
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-source-filtered-bookmarks"
+ **helm-source-filtered-bookmarks**
+end note
+"helm-source-filtered-bookmarks" <|-- "helm-bookmark-find-files-class"
+@enduml
diff --git a/doc/helm-source-in-buffer.plantuml b/doc/helm-source-in-buffer.plantuml
new file mode 100644
index 00000000..d6dd042f
--- /dev/null
+++ b/doc/helm-source-in-buffer.plantuml
@@ -0,0 +1,39 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-in-buffer'**\n\n
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-source-in-buffer" {
+ Use this source to make helm
+ sources storing candidates
+ inside a buffer.
+ ==
+ __ some interesting slots __
+ init
+ candidates
+ data
+ get-line
+ match
+ migemo
+ search
+ search-strict
+ volatile
+}
+note right of "helm-source-in-buffer"
+ **helm-source-in-buffer**:
+ Use this source to make helm
+ sources storing candidates
+ inside a buffer.
+end note
+"helm-source-in-buffer" <|-- "helm-semantic-source"
+"helm-source-in-buffer" <|-- "helm-file-cache"
+"helm-source-in-buffer" <|-- "helm-list-el-package-source"
+"helm-source-in-buffer" <|-- "helm-source-filtered-bookmarks"
+"helm-source-in-buffer" <|-- "helm-source-basic-bookmarks"
+"helm-source-in-buffer" <|-- "helm-info-source"
+"helm-source-in-buffer" <|-- "helm-browse-project-source"
+"helm-source-in-buffer" <|-- "helm-moccur-class"
+"helm-source-in-buffer" <|-- "helm-locate-subdirs-source"
+"helm-source-in-buffer" <|-- "helm-source-in-file"
+@enduml
diff --git a/doc/helm-source-in-file.plantuml b/doc/helm-source-in-file.plantuml
new file mode 100644
index 00000000..72a5c539
--- /dev/null
+++ b/doc/helm-source-in-file.plantuml
@@ -0,0 +1,25 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-in-file'**\n\n
+"helm-source-in-buffer" <|-- "helm-source-in-file"
+class "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-in-buffer"
+class "helm-source"
+class "helm-source-in-file" {
+ The contents of the FILE will
+ be used as candidates in
+ buffer.
+ ==
+ __ some interesting slots __
+ init
+ candidates-file
+ get-line
+}
+note right of "helm-source-in-file"
+ **helm-source-in-file**:
+ The contents of the FILE will
+ be used as candidates in
+ buffer.
+end note
+@enduml
diff --git a/doc/helm-source-session-class.plantuml b/doc/helm-source-session-class.plantuml
new file mode 100644
index 00000000..12a665b0
--- /dev/null
+++ b/doc/helm-source-session-class.plantuml
@@ -0,0 +1,19 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-session-class'**\n\n
+"helm-source-sync" <|-- "helm-source-session-class"
+class "helm-source-sync"
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-source-session-class" {
+ __ some interesting slots __
+ action
+ candidates
+ help-message
+ keymap
+}
+note right of "helm-source-session-class"
+ **helm-source-session-class**
+end note
+@enduml
diff --git a/doc/helm-source-sync.plantuml b/doc/helm-source-sync.plantuml
new file mode 100644
index 00000000..ed12e3e6
--- /dev/null
+++ b/doc/helm-source-sync.plantuml
@@ -0,0 +1,37 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source-sync'**\n\n
+"helm-source" <|-- "helm-source-sync"
+class "helm-source"
+class "helm-source-sync" {
+ Use this class to make helm
+ sources using a list of
+ candidates.
+ ==
+ __ some interesting slots __
+ candidates
+ match-dynamic
+ match-strict
+ migemo
+}
+note right of "helm-source-sync"
+ **helm-source-sync**:
+ Use this class to make helm
+ sources using a list of
+ candidates.
+end note
+"helm-source-sync" <|-- "helm-source-session-class"
+"helm-source-sync" <|-- "helm-files-dired-source"
+"helm-source-sync" <|-- "helm-imenu-source"
+"helm-source-sync" <|-- "helm-files-in-current-dir-source"
+"helm-source-sync" <|-- "helm-recentf-source"
+"helm-source-sync" <|-- "helm-eshell-history-source"
+"helm-source-sync" <|-- "helm-esh-source"
+"helm-source-sync" <|-- "helm-epa"
+"helm-source-sync" <|-- "helm-M-x-class"
+"helm-source-sync" <|-- "helm-idle-time-timers-class"
+"helm-source-sync" <|-- "helm-absolute-time-timers-class"
+"helm-source-sync" <|-- "helm-source-ffiles"
+"helm-source-sync" <|-- "helm-source-buffers"
+@enduml
diff --git a/doc/helm-source.plantuml b/doc/helm-source.plantuml
new file mode 100644
index 00000000..6f927c67
--- /dev/null
+++ b/doc/helm-source.plantuml
@@ -0,0 +1,72 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-source'**\n\n
+class "helm-source" {
+ Main interface to define helm
+ sources.
+ ==
+ __ some interesting slots __
+ init
+ name
+ action
+ action-transformer
+ after-init-hook
+ allow-dups
+ before-init-hook
+ candidate-number-limit
+ candidate-transformer
+ candidates
+ cleanup
+ coerce
+ delayed
+ display-to-real
+ filter-one-by-one
+ filtered-candidate-transformer
+ follow
+ follow-delay
+ fuzzy-match
+ group
+ header-line
+ header-name
+ help-message
+ history
+ keymap
+ marked-with-props
+ match
+ match-on-real
+ match-part
+ mode-line
+ multiline
+ multimatch
+ must-match
+ nohighlight
+ nomark
+ pattern-transformer
+ persistent-action
+ persistent-action-if
+ persistent-help
+ real-to-display
+ redisplay
+ requires-pattern
+ resume
+ update
+ volatile
+}
+note right of "helm-source"
+ **helm-source**:
+ Main interface to define helm
+ sources.
+end note
+"helm-source" <|-- "helm-bookmark-override-inheritor"
+"helm-source" <|-- "helm-type-timers"
+"helm-source" <|-- "helm-type-command"
+"helm-source" <|-- "helm-type-function"
+"helm-source" <|-- "helm-type-buffer"
+"helm-source" <|-- "helm-type-bookmark"
+"helm-source" <|-- "helm-type-file"
+"helm-source" <|-- "helm-source-dummy"
+"helm-source" <|-- "helm-source-in-buffer"
+"helm-source" <|-- "helm-source-async"
+"helm-source" <|-- "helm-source-sync"
+@enduml
diff --git a/doc/helm-type-bookmark.plantuml b/doc/helm-type-bookmark.plantuml
new file mode 100644
index 00000000..b5063075
--- /dev/null
+++ b/doc/helm-type-bookmark.plantuml
@@ -0,0 +1,20 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-bookmark'**\n\n
+"helm-source" <|-- "helm-type-bookmark"
+class "helm-source"
+class "helm-type-bookmark" {
+ A class to define type
+ bookmarks.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-bookmark"
+ **helm-type-bookmark**:
+ A class to define type
+ bookmarks.
+end note
+"helm-type-bookmark" <|-- "helm-source-filtered-bookmarks"
+"helm-type-bookmark" <|-- "helm-source-basic-bookmarks"
+@enduml
diff --git a/doc/helm-type-buffer.plantuml b/doc/helm-type-buffer.plantuml
new file mode 100644
index 00000000..fa284a38
--- /dev/null
+++ b/doc/helm-type-buffer.plantuml
@@ -0,0 +1,17 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-buffer'**\n\n
+"helm-source" <|-- "helm-type-buffer"
+class "helm-source"
+class "helm-type-buffer" {
+ A class to define type buffer.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-buffer"
+ **helm-type-buffer**:
+ A class to define type buffer.
+end note
+"helm-type-buffer" <|-- "helm-source-buffers"
+@enduml
diff --git a/doc/helm-type-command.plantuml b/doc/helm-type-command.plantuml
new file mode 100644
index 00000000..81b97704
--- /dev/null
+++ b/doc/helm-type-command.plantuml
@@ -0,0 +1,19 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-command'**\n\n
+"helm-source" <|-- "helm-type-command"
+class "helm-source"
+class "helm-type-command" {
+ A class to define helm type
+ command.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-command"
+ **helm-type-command**:
+ A class to define helm type
+ command.
+end note
+"helm-type-command" <|-- "helm-M-x-class"
+@enduml
diff --git a/doc/helm-type-file.plantuml b/doc/helm-type-file.plantuml
new file mode 100644
index 00000000..d0118afa
--- /dev/null
+++ b/doc/helm-type-file.plantuml
@@ -0,0 +1,25 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-file'**\n\n
+"helm-source" <|-- "helm-type-file"
+class "helm-source"
+class "helm-type-file" {
+ A class to define helm type
+ file.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-file"
+ **helm-type-file**:
+ A class to define helm type
+ file.
+end note
+"helm-type-file" <|-- "helm-mac-spotlight-source"
+"helm-type-file" <|-- "helm-files-dired-source"
+"helm-type-file" <|-- "helm-files-in-current-dir-source"
+"helm-type-file" <|-- "helm-recentf-source"
+"helm-type-file" <|-- "helm-file-cache"
+"helm-type-file" <|-- "helm-browse-project-override-inheritor"
+"helm-type-file" <|-- "helm-locate-override-inheritor"
+@enduml
diff --git a/doc/helm-type-function.plantuml b/doc/helm-type-function.plantuml
new file mode 100644
index 00000000..a95ea08b
--- /dev/null
+++ b/doc/helm-type-function.plantuml
@@ -0,0 +1,18 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-function'**\n\n
+"helm-source" <|-- "helm-type-function"
+class "helm-source"
+class "helm-type-function" {
+ A class to define helm type
+ function.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-function"
+ **helm-type-function**:
+ A class to define helm type
+ function.
+end note
+@enduml
diff --git a/doc/helm-type-timers.plantuml b/doc/helm-type-timers.plantuml
new file mode 100644
index 00000000..159824d2
--- /dev/null
+++ b/doc/helm-type-timers.plantuml
@@ -0,0 +1,20 @@
+@startuml
+skinparam classFontStyle bold
+skinparam captionFontStyle bold
+title **Parents and Children of**\n**'helm-type-timers'**\n\n
+"helm-source" <|-- "helm-type-timers"
+class "helm-source"
+class "helm-type-timers" {
+ A class to define helm type
+ timers.
+ ==
+ __ some interesting slots __
+}
+note right of "helm-type-timers"
+ **helm-type-timers**:
+ A class to define helm type
+ timers.
+end note
+"helm-type-timers" <|-- "helm-idle-time-timers-class"
+"helm-type-timers" <|-- "helm-absolute-time-timers-class"
+@enduml