276 Commits

Author SHA1 Message Date
Christian Brabandt
0f78ad819a Calculate section width dynamically 2017-06-26 14:04:54 +02:00
Christian Brabandt
f86f1e8103 whitespace: Only refresh on changes to buffer
Should prevent too many redraws of Vim
2017-06-26 10:04:43 +02:00
Christian Brabandt
811360a095 Merge pull request #1497 from w0rp/update-ale-extension
Update the ALE extension
2017-06-26 09:56:32 +02:00
w0rp
c8a5efc11e Update the ALE extension so it loads better and uses the new count format 2017-06-25 19:49:18 +01:00
Christian Brabandt
e7d18fe427 Updated README.md mention correct Vundle repo 2017-06-24 17:05:24 +02:00
Christian Brabandt
0a352c9f5b branch: don't check untracked status for files in vcs dir
Currently, vim-airline will check untracked status for files e.g. living
in .git. So when editing .git/config it will show as being untracked.

While technically, this is correct I prefer not to see this for those
files. So skip the check for those files.
2017-06-24 14:03:40 +02:00
Christian Brabandt
ac032b752a Fix missing backquote 2017-06-24 13:43:46 +02:00
Christian Brabandt
b101175683 Mention minpac installation 2017-06-24 13:42:13 +02:00
Christian Brabandt
fde2511201 Syntastic: remove unused variable 2017-06-22 09:47:01 +02:00
Christian Brabandt
57e564b227 Add termguicolor check for is_win32term
closes #1259
2017-06-21 15:44:58 +02:00
Christian Brabandt
7d082c03b2 Do not clear intro screen
if airline is initialized too early and some :hi commands are run,
this will force a redraw in Vim which will result in the intro screen
being cleared.

Currently, this does not work for gvim, not sure why.

closes #1476 (well only partly, until i have discovered, why for gvim it
doesn't work).
2017-06-21 13:21:13 +02:00
Christian Brabandt
87cdf8f6c4 highlighter: Make sure hi group exists and is valid
previously we only checked, that the group exists, however
if loading a new color scheme, this might lead to the group becoming
cleared. That means it still exists, but the highlighting group would
not show anything. Therefore, also check that the group is not cleared.

closes #1483
2017-06-21 09:19:51 +02:00
Christian Brabandt
52c0afadb9 Merge pull request #1413 from chrisbra/wordformat
Improvements to wordcount formatting
2017-06-20 23:31:15 +02:00
Christian Brabandt
258f3e5630 fix failing test by defining all default sections
previous commit 2e3055541e broke the unit tests, since it renamed
the syntastic section. Fix that and also test correctly the other
sections, that have been added (and which have not been tested until
now).
2017-06-20 22:38:56 +02:00
Christian Brabandt
2e3055541e syntastic: distinguis errors and warnings
Currently the syntastic results are simply dumped into the error
section, however syntastic does internally distinguish between error and
warning sections.

Therefore change the syntastic extension to dump errors into the error
section and warnings into the warning section.

closes #1480
2017-06-20 22:26:22 +02:00
Christian Brabandt
d2b697d27b ale ext: fix syntax error 2017-06-20 22:23:46 +02:00
Christian Brabandt
ed95adea1e update doc: Mention and document ale/neomake extensions 2017-06-20 21:34:35 +02:00
Christian Brabandt
7f3d6287b5 ale ext: simplify logic 2017-06-20 21:20:24 +02:00
Christian Brabandt
1891933e59 branch: better display of branch for both hg and git
If a file is edited inside a git repository, which lies within a git
repository, the branch extensions shows 'gitmaster | hgdefault'

To make it more obvious, that we are looking into both repositories
here, use 'git:master | hg:default'

closes #1482
2017-06-20 17:47:07 +02:00
Christian Brabandt
9168b73411 update doc example, clarify how to truncate string 2017-06-20 14:14:09 +02:00
Christian Brabandt
c436592559 bufferline: take 'acd' into account
vim-airline does use a different section (path/file) depending on
whether 'acd' is set. Later in the bufferline extesion however, it
unconditionally overwrites the 'file' section, regardless of whether
this section is actually used.

Therefore the bufferline section needs to check this option as well.

fixes #1487
2017-06-20 13:58:39 +02:00
Christian Brabandt
e16ff7cc88 Do not error out, if a netrw variable is not defined
This should not happen, however being a bit more error tolerant
shouldn't hurt, so let's just fall back to 'normal' for the
g:netrw_sort_direction in case it is not defined (which should be the
default anyhow).

fixes #1492
2017-06-19 15:56:17 +02:00
Christian Brabandt
9eb51f48f4 Merge pull request #1489 from ozelentok/master
Improve denite extension performance
2017-06-12 21:11:41 +02:00
Oz Elentok
7865dc8149 Improve denite extension performance 2017-06-12 22:00:25 +03:00
Christian Brabandt
466198adc0 Merge pull request #1462 from maxfl/airline-vimtex
Add vimtex support
2017-05-08 12:10:38 +02:00
Maxim Gonchar
8e64138ef4 Add vimtex support
Indicates:
- whether the file is considered to be main or local
- whether the viewer is opened
- whether the compilation is running
- whether the compilation is continuous

Added:

* `vimtex` existence check
* variables documentation

TODO: readme and a screenshot

Update readme.md

Update doc

Update screenshot url
2017-05-08 13:07:13 +03:00
Christian Brabandt
d593359500 shorten filetype only when winwidth is < 90 2017-05-02 22:06:36 +02:00
Christian Brabandt
b3722b1e82 Merge pull request #1474 from mtn/readme
Add dein.vim to plugins-managers
2017-05-02 21:23:45 +02:00
Christian Brabandt
a950a2938a shorten tagbar extension on short windows 2017-05-02 21:22:47 +02:00
Christian Brabandt
0c368681dd Add some intro documentation
closes #1473
2017-05-02 20:43:08 +02:00
Michael Noronha
bcb52a1feb Add dein.vim to plugins-managers 2017-05-02 12:58:52 -05:00
Christian Brabandt
13bd4701ed Updates to the documentation 2017-04-21 07:41:22 +02:00
Christian Brabandt
4a47cd70cd correctly check w:airline_skip_empty_sections var 2017-04-11 22:10:43 +02:00
Christian Brabandt
f76ede3b28 Make skip_empty variable overridable per window
The denite extension functions return the content of some buffer-local
variables. Those variables are not defined, the first time the they are
accessed and therefore, the statusline is not updated later when
g:airline_skip_empty_sections is set.

So disable this variable in this window, by setting the
w:airline_skip_empty_section=0 variable in the denite window.

closes #1454
2017-04-10 09:29:27 +02:00
Christian Brabandt
396b49be4c Merge pull request #1455 from graysonwright/patch-1
[readme] Display install instructions in a table
2017-03-26 22:30:37 +02:00
Grayson Wright
e14f6579d7 [format] Display install instructions in a table
Previously, the instructions were displayed in a list without nesting,
and were hard to follow.

Since all the install commands are essentially one-liners,
a table makes it easy to look them up by package manager.
2017-03-26 13:19:09 -07:00
Christian Brabandt
b4ad02f906 fix wrong variable name 2017-03-20 08:56:35 +01:00
Christian Brabandt
703241942a Add filetype to chache, disable cache for fugitive
#1452 (partly)
2017-03-20 08:37:48 +01:00
Christian Brabandt
7813a54912 Merge pull request #1449 from shivrai/master
Update icon spacings
2017-03-17 14:46:33 +01:00
Shivansh Rai
223624d3e9 Update icon spacings
The line numbers start to merge with icons when they get large
Reference: https://image.ibb.co/e7KGaa/airline.jpg
2017-03-17 19:08:47 +05:30
Christian Brabandt
3a23eeac42 Check that 'statusline' option is correct
statusline of quickfix window will be reset in the ftplugin of
$VIMRUNTIME, therefore check that airline is still active

fixes #1447
2017-03-17 12:03:19 +01:00
Christian Brabandt
b57022bfc2 update to the documentation
Mention, that the variable
g:airline#extensions#tabline#switch_buffers_and_tabs only works
with the ctrlspace integration.

closes #1390
2017-03-16 21:18:23 +01:00
Christian Brabandt
70dd0655d2 Do not trigger on SessionLoadPost autocommand
This basically reverts commit 64a3bfd

closes #1444
2017-03-16 13:15:17 +01:00
Christian Brabandt
46b0b6bf5a Merge pull request #1427 from thatsmydoing/denite
Add support for denite
2017-03-15 10:06:19 +01:00
Thomas Dy
c9a0c62b1b Add support for denite 2017-03-15 16:41:50 +08:00
Christian Brabandt
17d2db93fd Check, that fg color can't be negative 2017-03-13 18:50:19 +01:00
Christian Brabandt
ba7d8c59f7 Call hg qtop with locale set to C
closes #1438
2017-03-13 09:49:02 +01:00
Christian Brabandt
d46fb524bd Merge pull request #1439 from cxw42/master
Permit appending content to a theme copied from dark.vim
2017-03-13 07:39:07 +01:00
Chris White
fb6231b479 Permit appending content to a theme
When ctrlp is not loaded, do not finish (terminate script execution).
Instead, just skip assigning the ctrlp colors.
2017-03-12 18:16:26 -04:00
Christian Brabandt
134c0204f3 Do not return a negative background color
fixes #1429 and similar
2017-03-05 22:18:04 +01:00
Christian Brabandt
fbd791e7f0 Merge pull request #1424 from tweekmonster/powerline
Fix g:airline_powerline_fonts check
2017-02-28 08:51:08 +01:00
Christian Brabandt
52663545a9 Only reset to Normal highlighting if it is actually defined
closes #1415 and similar
2017-02-28 08:33:44 +01:00
Tommy Allen
9876a0a2de Fix g:airline_powerline_fonts check 2017-02-27 22:32:06 -05:00
Christian Brabandt
ac9e4092ef Add paranthesis to function call in documentation 2017-02-26 10:49:52 +01:00
Alexey Zhikhartsev
3c6135d75f Add a function to disable whitespace-detection
Useful to call for particular file types (e.g., .tex files):
ftplugin/tex.vim:
    call airline#extensions#whitespace#disable()
2017-02-26 10:35:17 +01:00
Christian Brabandt
2ea22c1aaa Also cache filetype
The cache currently prevents e.g. that the wordcount() extensions kicks in the
first time you open a help window. Therefore take the filetype into
consideration as well.
2017-02-26 10:30:02 +01:00
Christian Brabandt
9d89375b8f Do not update wordcount on unknown buffers 2017-02-26 10:25:21 +01:00
Christian Brabandt
727a2b48d9 Rename wordcount update function 2017-02-26 10:24:08 +01:00
Christian Brabandt
7e6986651c Fix stupid typo 2017-02-25 22:13:16 +01:00
Christian Brabandt
f8c85e3e53 for airline ascii symbols set g:airline_symbols_ascii 2017-02-25 17:39:32 +01:00
Christian Brabandt
d624a44500 Fix tests for the changed default separators 2017-02-24 22:49:39 +01:00
Jorrit Visser
078537f1e2 Add interface fallback (Powerline>Unicode>ASCII)
Basically what the title says. First check if the user has Powerline,
fall back to Unicode symbols if he doesn't and fall back to ASCII
symbols if he doesn't have that either.
2017-02-24 22:23:41 +01:00
Jorrit Visser
72478dee02 Make vim-airline pretty without Powerline
Vim-airline is not a looker without a Powerline font. This fixes that!

* Ugly separator symbols are hidden
* New branch (ᚠ), line (㏑), maxline (☰) and whitespace (☲) symbols
* Replace old whitespace (✹) symbol in Powerline with the new (☲) more logical one
2017-02-24 22:23:41 +01:00
Christian Brabandt
dd2740f510 Merge pull request #1408 from chrisbra/highlight_improvements
Highlight improvements
2017-02-24 18:32:25 +01:00
Christian Brabandt
db01efd508 Better reformat wordcount format in with separator 2017-02-24 18:28:48 +01:00
Christian Brabandt
b2bbe7dbc2 Small wordcount format output on windows < 80 2017-02-24 18:25:29 +01:00
Christian Brabandt
562d060b08 Reset wordcount cache on window size
so the format can make a better guess what to display on different
window sizes.
2017-02-24 18:24:30 +01:00
Christian Brabandt
d8b62aa426 Remove unused variable 2017-02-24 18:22:25 +01:00
Christian Brabandt
f1574c4e0a define highlighting group, if it not exists
previously, it could have been skipped, if the old highlighting
attribute was the same as the current one. However, if the group does
not exist, it should still be defined

closes #1404
2017-02-20 21:30:10 +01:00
Christian Brabandt
69b132a6f4 Make sure, the highlighting group will be defined
If a color value of ['', '', 'NONE', 'NONE', ''] is given as value to
the highlighting group, the resulting group definition would look like
this:

hi Normal ctermfg=NONE ctermbg=NONE

which would result in the highlighting group being cleared (or even no
set at all), therefore check that at least one other value exists and if
not fall back to the highlighting definition of the Normal group.
2017-02-20 21:30:10 +01:00
Christian Brabandt
583121bbc9 before trying to return hi attributes, check the group exists
This prevents trying to access twice the highlighting groups
and should slightly speed up airline.
2017-02-20 21:29:37 +01:00
Christian Brabandt
b66c1ef070 Redraw statusline on CompleteDone event
closes #1402
2017-02-11 20:11:59 +01:00
Christian Brabandt
8a01eff1c2 Merge pull request #1396 from originalpositron/master
Truncation fix for whitespace extension
2017-02-07 14:48:02 +01:00
Jorrit Visser
8776a3e058 Truncation fix
Line numbers are now displayed before the error, instead of after, preventing truncation (and thus making the whitespace/indent section essentially useless in smaller terminals)
2017-02-07 14:20:56 +01:00
Christian Brabandt
7df411d59b Add missing comma
fixes #1386
2017-01-27 12:10:07 +01:00
Christian Brabandt
1a79d148dc do not add two bold accents to linenr and maxlinenr 2017-01-27 11:25:37 +01:00
Christian Brabandt
b56a064377 Use get() to access members of getwininfo() function
And add default value, in case the 'loclist' and 'quickfix' entry is not
available (can happen on versions without +quickfix feature).

Fixes #1379
2017-01-21 22:02:40 +01:00
Jerome Reybert
9a95964256 Fix typo in doc/airline.txt
Add tag for vim-airline
2017-01-19 15:15:05 +01:00
Christian Brabandt
e7e4769dc1 Merge pull request #1375 from jreybert/master
Add vimagit extension to display current mode
2017-01-19 15:09:00 +01:00
Jerome Reybert
a1db013d3f Add vimagit extension 2017-01-19 14:02:53 +01:00
Christian Brabandt
92d3637384 Merge pull request #1376 from aisk/master
Remove .swp files and add it to gitignore
2017-01-19 08:58:42 +01:00
Long Ang
3a857617e3 Remove .swp files and add it to gitignore 2017-01-19 11:30:35 +08:00
Christian Brabandt
85cbdd8de3 Add link to xkblayout extension 2017-01-18 09:58:33 +01:00
Christian Brabandt
9b1770f246 hg extension did not work on Windows
remove extra file argument

closes #1367
2016-12-31 23:50:39 +01:00
Christian Brabandt
bfac656da9 Merge pull request #1372 from dalguji/master
Add vim-xkblayout extension to display keyboard layout
2017-01-18 08:00:52 +01:00
YoungHoon Rhiu
d60323d623 Add vim-xkblayout extension to display keyboard layout 2017-01-18 12:34:14 +09:00
Christian Brabandt
a2431f2adb Check s:jobs dictionary before trying to remove jobid
fixes #1363
2016-12-29 11:22:55 +01:00
Christian Brabandt
e83ed24088 Merge pull request #1358 from chrisbra/1329
Add tab indicator for tabline when buffers are shown
2016-12-19 11:54:38 +01:00
Christian Brabandt
706cee277a Add tab indicator for tabline when buffers are shown
closes #1329
2016-12-16 23:42:58 +01:00
Christian Brabandt
73a1238205 wrong quoting of condition 2016-12-14 16:10:33 +01:00
Christian Brabandt
a69834f7dc Make fileformat output truncatable
closes #1309
2016-12-13 21:47:09 +01:00
Christian Brabandt
a0ea8db1fc Make the wordcount ext more flexible for the def. filetypes
This allows the user to further adjust the
g:airline#extensions#wordcount#filetypes configuration variable even
after Vim has started up.
2016-12-13 21:27:53 +01:00
Christian Brabandt
5e2ef0cd83 document how to format the wordcount ext. output 2016-12-13 21:23:56 +01:00
Christian Brabandt
c375d050a8 Do not add extra %( %) in the statusline
This was used as a workaround to fix a highlighting bug, which was fixed
in Vim 7.4.1511 and therefore, we need to correctly detect that the
patch was applied and in that case skip adding those extra groups.

As a bonus, when not using those empty %( %) groups, the
skip_empty_section test will correctly handle this and therefore this
closes #1351
2016-12-13 21:14:51 +01:00
Christian Brabandt
7cd7972bbe cleanup unlet calls
Instead of looping through the list and unletting each value separately,
join the list and their names together and unlet them all together.
2016-12-13 20:28:30 +01:00
Hirokazu Hata
dfc0cb772a Add dict to function refferencing self
This is no explicit problem in Vim, however Neovim diverged in this
behaviour from Vim and requires the dict attribute to be present before
accessing the self attribute.

See neovim/neovim#5763
2016-12-12 19:26:52 +01:00
Sam Fuller
7cb5c24151 prevent windows from closing on middle_click
Adding an option to prevent windows from being closed when a buffer in
the tabline is middle clicked and the clicked buffer is currently open
in a window.

When this option is enabled, instead of closing the window a new buffer
will be opened in all of the windows editing the clicked buffer instead.

This is my first pull request AND my first experience with vimscript, so
my apologies if this is a bit sloppy 😄
2016-12-09 13:20:48 +01:00
Christian Brabandt
781b4ea6a2 Merge pull request #1321 from chrisbra/getwininfo
Use getwininfo() for checking quickfix window
2016-12-09 12:59:46 +01:00
Nate Soares
17b6bd9c8f Fixed bug where highlighting on inactive windows wouldn't refresh.
This seems to be an omission/regression from #afb75adc, where inactive
highlight updating was accidentally removed when fixing another bug.

Solution: Add back the deleted statement. closes #1339

Repro steps:
1. Install some theme that depends on the background color
   (Soares/base16.nvim has a bunch)
2. `set background=dark` in your vimrc, and `colorscheme` one of the
   aforementioned schemes.
3. Open a split window. Note the colors on the inactive window's airline.
4. `set background=light` manually. note the colors on the inactive
   window's airline. Note how they have not updated. (In particular,
   airline_c_inactive has updated, but all the other inactive groups
   have not.)
5. Enter the inactive window. Exit the inactive window. Observe that the
   colors are now correct (showing that it is in fact a problem with the
   airline load_theme code, and not with the theme).

It seems strange that the code as written only expects
airline_c_inactive to have styling; perhaps there is some norm that
themes are supposed to handle inactive windows in a particular way? For
the record, my theme dis omething like this:

```
let s:IA1   = s:airlist('similar1', 'similar2')
let s:IA2   = s:airlist('similar1', 'similar2')
let s:IA3   = s:airlist('similar1', 'similar2')
let g:airline#themes#{s:palette}#palette.inactive = airline#themes#generate_color_map(s:IA1, s:IA2, s:IA3)
let g:airline#themes#{s:palette}#palette.inactive.airline_warning = s:airlist('base', 'contrast3')
let g:airline#themes#{s:palette}#palette.inactive.airline_error = s:airlist('base', 'antibase')
```
2016-12-09 12:53:35 +01:00
Christian Brabandt
0357b4fcbe Merge pull request #1348 from shaunbrady/exclude_at_runtime
Make ...#excludes|exclude_preview runtime configurable
2016-12-06 21:18:38 +01:00
Christian Brabandt
4c39344cc1 Merge pull request #1334 from chrisbra/worktrees
Add Worktrees support
2016-12-06 21:17:51 +01:00
Shaun Brady
718107c107 Make ...#excludes|exclude_preview runtime configurable
airline#extensions#tabline#excludes and
airline#extensions#tabline#exclude_preview previously had no impact if
changed after vim load.  This fixes that.
2016-12-03 23:40:15 -05:00
Christian Brabandt
04be981de9 make ...#fnamemod configurable during runtime
airline#extensions#tabline#fnamemod would be initialized and could not
be changed during runtime, so fix that.

closes #1347
2016-12-02 13:40:34 +01:00
Christian Brabandt
ccdc3d6c60 Merge pull request #1337 from mhartington/master
feat(): allow for buffer index formatting
2016-11-26 14:26:47 +01:00
mhartington
ee8173e41d feat(): allow for buffer index formatting 2016-11-25 12:36:55 -05:00
Christian Brabandt
53c8aa4fd6 enable wordcount for mail and tex filetypes 2016-11-24 15:20:38 +01:00
Christian Brabandt
b67509189b check for correct variable 2016-11-23 16:35:01 +01:00
Christian Brabandt
d4a239f14a Make airline aware of git worktrees
Currently vim-airline assumes, that the git_dir is part of the path for
the file being edited. This has changed, since git supports worktrees.

So take care of b:git_dir (which is set by fugitive) being a path
differently from the absolute path of the file being edited (however, it
should include the substring worktree in that case).
2016-11-23 16:33:12 +01:00
Christian Brabandt
3ebd7ad64b Merge pull request #1331 from flatcap/master
Abbreviate the text for 'po' translation files.
2016-11-23 08:15:19 +01:00
Richard Russon
4e93a90441 Abbreviate the text for 'po' translation files.
A typical status line for a 'po' (Portable Object) translation file is:

  1152 translated messages, 91 fuzzy translations, 42 untranslated messages.

Adding a substitute(), tidies this to:

  1152 translated, 91 fuzzy, 42 untranslated

which is still informative, but less verbose.
2016-11-22 11:24:10 +00:00
Christian Brabandt
c02d774b05 Merge pull request #1327 from gregorias/nvim_git_issue
Do not forward v:shell_error on command fail.
2016-11-20 16:47:32 +01:00
Grzegorz Milka
241f324b39 Do not forward v:shell_error on command fail.
airline#system#util for nvim used to fall back to 'system' implementation on
command error. This behavior caused conflict with other plugins if 'util' was
executed with a failing command as part of a ShellCmdPost event.

This commit makes 'util' interpret command error as persistent and not call
'system' in such a case.

This commit fixes #1317.
2016-11-20 10:16:13 +01:00
Christian Brabandt
cebfc9a64b Use getwininfo() for checking quickfix window
Since Vim8 we have win_getid() and getwininfo() functions to get
information about the current window. So we can use those functions to
find out, whether the current window is a quickfix or location list
window.

This avoids using a redir() over the :ls command and trying to
manually match the string quickfix and should be faster and also be more
robust, as the redir may fail if done recursively.

fixes #1319
2016-11-16 20:14:27 +01:00
Christian Brabandt
2dae2b364e Merge pull request #1314 from tbodt/patch-1
add vim-bufmru to the list of integrated plugins
2016-11-15 18:58:03 +01:00
Theodore Dubois
a314038280 add vim-bufmru to the list of integrated plugins 2016-11-05 09:16:03 -07:00
Christian Brabandt
258430db82 Merge pull request #1312 from gregorias/async
Use neovim's async job's instead of system
2016-11-04 21:22:32 +01:00
Grzegorz Milka
433d5d8f97 Use neovim's async job's instead of system
This commit makes branch.vim use neovim's async jobs instead of a system()
function. This way we avoid the v:shell_error overwrite bug and allow live
updates of the untracked status.
2016-11-04 19:09:05 +01:00
Christian Brabandt
545617f4f4 Merge pull request #1311 from watagashi/fix_lawrencium
Fix when using vim-lawrencium
2016-11-04 07:52:32 +01:00
WADA Takashi
e7056db27a Fix when using vim-lawrencium 2016-11-04 10:54:39 +09:00
Grzegorz Milka
3899f848a7 Adapt data structures of branch.vim to async
* The head string is now calculated iff it has changed.
* The not exists symbol for current file appears as soon as its status is known.
* Fixes various problems with asynchronous status checking, such as:
  * The not exists symbol keeps appearing and disapearing. This happened when
    file was marked as not existing, the untracked cache was invalidated, and
    the cache update is started, but in the meantime, the head string
    calculation used the current (empty) value of the cache.
  * The not exists symbol never appears, because cache keeps getting invalidated
    before b:airline_head is emptied and updated.

closes #1306
2016-11-03 21:03:13 +01:00
Christian Brabandt
02ecb8631d fix missing part of commit 3bd6cb5ee4
There was a part missing of #3bd6cb5ee4981227
add it back
2016-11-03 17:54:50 +01:00
Christian Brabandt
6dae3452db Fix order of statements
Commit #3bd6cb5ee498 causes an error, because a variable was used
before it was declared. Fix this.
2016-11-03 17:26:32 +01:00
Grzegorz Milka
3bd6cb5ee4 Refactor branch.vim to avoid code duplication
* Introduce a config variable that holds the vcs-dependent parts of code.
* Removes `get_*_untracked` duplication by merging their logic together.
* Removes custom checks for 'git' or 'hg'. Functions now rely on provided config
  argument.
* Use loops instead of manually specifying each handled VCS.

closes #1303
2016-11-03 17:19:17 +01:00
Christian Brabandt
b97d7a11f4 mention notexists symbol in documentation 2016-11-03 14:01:27 +01:00
Christian Brabandt
516870bf9f Check for correct async condition
fixes #1308
2016-11-02 16:43:47 +01:00
Christian Brabandt
0ea4daa103 Merge pull request #1297 from chrisbra/mq
Add mq status for hg repositories
2016-10-26 20:47:45 +02:00
Christian Brabandt
98fe4eabd4 Merge pull request #1299 from gregorias/fix_git_untracked
Display not exists symbol correctly in Git repos
2016-10-26 20:47:28 +02:00
Grzegorz Milka
2af2bdb424 Display not exists symbol correctly in Git repos
This commit fixes a bug, where untracked files in Git repos did not get the not
exists symbol displayed. The fix works by replacing the previous check for
whether currently edited file is a directory or not with a check based on
`findfile`. More detailed explanation follows.

VCS extension to vim-airline checks whether currently edited file is untracked.
The previous `s:get_git_untracked` implementation, which was used for the
aforementioned purpose for Git repos, was buggy, because it did not return the
untracked symbol in most situations, i.e. the edited file is untracked, but it
was treated as if it wasn't.
The root cause was the second clause in boolean expression checking the output
of `git status`:

    if output[0:1] is# '??' && output[3:-2] is? a:file

It was added to make sure we are not checking a directory, but at this point in
the program `a:file` is an absolute path, while output of `git status` is a
relative path from the root of git repo. So the `is?` expression failed in most
situations.
2016-10-25 19:26:44 +02:00
Christian Brabandt
5fe511c20b Merge pull request #1298 from chrisbra/shorten_mode
Shorten mode message for small windows
2016-10-25 08:01:07 +02:00
Christian Brabandt
58e7e276fa Merge pull request #1302 from chrisbra/loaded_extensions
guard against loading extensions twice
2016-10-25 08:00:25 +02:00
Christian Brabandt
6a155fabda guard against loading extensions twice
fixes #1300
2016-10-24 12:14:30 +02:00
Christian Brabandt
69020706b2 Shorten mode message for small windows 2016-10-20 22:57:26 +02:00
Christian Brabandt
14ab47cae6 Add mq status for hg repositories
Now that we have async feature for Vim 8, we can add the output of 'hg
qtop' back to the statusline if it is supported
2016-10-20 22:46:24 +02:00
Christian Brabandt
64d91665fe Merge pull request #1294 from asbhat/master
on_exit function fix if self.file is missing
2016-10-19 08:08:06 +02:00
Aditya
be6e3db68b on_exit function fix if self.file is missing 2016-10-18 22:23:07 -04:00
Christian Brabandt
8964603844 fix missing declaration 2016-10-14 11:14:33 +02:00
Misha Brukman
2dc2748804 Remove Bitdeli as it's defunct. 2016-10-14 10:36:21 +02:00
Bjorn Neergaard
06351e86df Add support for ALE, the Async Linting Engine
Ale is a plugin that lints text in the background, as you type!

It is new, but under [rapid development](https://github.com/w0rp/ale).
2016-10-14 10:36:21 +02:00
Bjorn Neergaard
45e5c907be Add support for flattened and NeoSolarized themes
These are forks/alternate versions of Solarized, without many of the
dynamic elements or the extensive terminal support.

[flattened](https://github.com/romainl/flattened) is a basic, totally
static version of Solarized with only ansi and GUI support.

[NeoSolarized](https://github.com/iCyMind/NeoSolarized) is a version
focusing on true/24-bit color support and NeoVim support, with limited
dynamic options.

[solarized8](https://github.com/lifepillar/vim-solarized8) is a version
focusing on vim/neovim true color support and limited dynamics. It is
already supported (`match()` matches it), but it is at least worth
noting.

Many users, including myself, use these themes over the original
Solarized for performance or technical reasons. Many users believe they
are incompatible with airline because automatic theming no longer
functions. While they can manually override the theme, most people seem
to miss this option in the documentation and give up.

It would be a nice quality of live improvement if airline detected these
themes and enabled its own Solarized theme automatically to match.
2016-10-14 10:36:21 +02:00
Christian Brabandt
4f8a16c31e fixup for async feature 2016-10-14 10:36:21 +02:00
Christian Brabandt
81ccd3bdf6 po-extension: Make asyncable 2016-10-14 10:36:21 +02:00
Christian Brabandt
c39e5f82cc check for existence of git/hg before calling them 2016-10-14 10:36:21 +02:00
Christian Brabandt
f706edee9f init async global variables 2016-10-14 10:36:21 +02:00
Christian Brabandt
57ca6c9e78 include workaround from c1704a2de0
add workaround from commit c1704a2de0 to prevent overwriting
v:shell_error
2016-10-14 10:36:21 +02:00
Christian Brabandt
ffa3d59af2 branch ext: use async functions for system() commands
Make use of vim 8 async functionality and use it to get the vcs status
for the branch extension.

Won't work with neovim.

fixes #1266
2016-10-14 10:36:21 +02:00
Christian Brabandt
75a0199a7d Merge pull request #1279 from bentomas/master
Fix whitespace symbol empty string has extra space
2016-10-07 09:04:39 +02:00
Benjamin Thomas
78439b2b35 Fix whitespace symbol empty string has extra space
This makes it so if the whitespace symbol (g:airline#extensions#whitespace#symbol) is an empty string, we don't end up wth two characters at the beginning of the message.
2016-10-02 01:22:50 -07:00
Christian Brabandt
2be9a044e0 Updated Issue template 2016-09-28 22:13:54 +02:00
Christian Brabandt
7a736021ee Merge pull request #1276 from chrisbra/tabline_bug
do not skip empty sections for the tabline
2016-09-27 22:46:04 +02:00
Christian Brabandt
f5359f9177 do not skip empty sections for the tabline
commit #3d667c32d3ac04 fixed a bug, that a section was not considered
empty for the statusline, also g:airline_skip_empty was set.

However unfortunately, this lead to a regression, makeing the tabline
ugly, because sections, that contained a single highlighting group would
be considered empty and would therefore be skipped. Since this is not
what is expected, make s:section_is_empty() return zero, when it notices
we are looking at a tabline.

fixes #1273
2016-09-27 21:44:00 +02:00
Saad Malik
3c33251ee7 Support for neomake
Added support for neomake plugin; similar to syntastic.
Shows warning and error counts in the airline statusbar.
2016-09-27 21:21:35 +02:00
Christian Brabandt
1c052e39b1 Merge pull request #1271 from chrisbra/highlighter_bug
Use the correct highlighting for the inactive window
2016-09-26 21:13:02 +02:00
Christian Brabandt
29c556dba4 use correct groupname for inactive windows
airline_c (which contains the filename) usually is used together with
the buffer number, so that several windows showing the a different
buffer do not share the same highlighting group.

This was fixed in 73aea86a, but unfortunately it was forgotten to not
only add this to the current group, but also modify the previous group
accordingly. This is what this patch does.

fixes #1268
2016-09-26 21:12:15 +02:00
Christian Brabandt
5ee2cd9acf Merge pull request #1269 from chrisbra/1231
for empty sections, make test return true
2016-09-25 20:25:08 +02:00
Christian Brabandt
3d667c32d3 for empty sections, make test return true
fixes #1231
2016-09-24 22:06:41 +02:00
Christian Brabandt
513afd25bc Merge pull request #1263 from thawk/master
Set script encoding to avoid script parsing problem in non UTF-8 VIM
2016-09-24 21:55:50 +02:00
thawk
45d77ca909 Add 'scriptencoding utf-8' to all scripts 2016-09-24 08:16:30 +08:00
Christian Brabandt
c1704a2de0 Do not overwrite v:shell_overwrite after ShellCmdPost
Prevents resetting v:shell_error from the followin system() call in
get_git_untracked.

Fixes #1266
2016-09-23 16:11:53 +02:00
Christian Brabandt
73152217fb Merge pull request #1265 from Robzz/per_buffer_whitespace_checks
Implement per buffer configuration of whitespace checks
2016-09-22 22:02:39 +02:00
R.Chavignat
da457ae5ea Add support for b:airline_whitespace_checks variable and documentation 2016-09-22 14:27:07 +02:00
Christian Brabandt
7a720bbbd7 Merge pull request #1256 from chrisbra/1253
do not cache status of statusline per tabpage
2016-09-15 16:42:06 +02:00
Christian Brabandt
6e3c0c1c14 do not cache status of statusline per tabpage
When cacheing the values of buffer number, window number per tabpage, we
might forget to update the statusline when it is actually needed, e.g.
on `:tab help h | norm! gt` which would then still display "Help" also
we are not in a help window anymore.

Therefore cache those values (including current tabpage number)
globally.

fixes #1253
2016-09-14 19:05:57 +02:00
Christian Brabandt
65b9aa4856 Check for existence of key in context dict before using it
fixes #1251
2016-09-09 08:07:07 +02:00
Christian Brabandt
c058922358 do not use utf-8 chars, if encoding is different
fixes #1234 #1248
2016-09-08 21:33:39 +02:00
Christian Brabandt
afee79bbe0 Merge pull request #1250 from chrisbra/1233
Do not unconditionally modify airline_c_inactive
2016-09-08 21:30:20 +02:00
Simon Ratner
0b1df0c524 Add null accent, to allow accents to be removed 2016-09-08 21:24:04 +02:00
Christian Brabandt
73aea86a7a Do not unconditionally modify airline_c_inactive
consider a window with these splits:
,----
| file1
| ---
| file2
| ---
| file1
`----

If the top buffer is the active one and you start modifying this buffer,
this will also reset the highlighting for the inactive buffer2, since
the highlighting group 'airline_c_inactive' is used for both windows
(one having the unmodified buffer 'file2' and one having the modified
'file1').

This lead to the incorrect highlighting of the buffer name of file2.

Airline basically already created different airline_c<bufnr>_inactive
highlighting groups, but unfortunately did not use them.

Therefore, make the builder aware of this and always append the buffer
number to the group 'airline_c' if it is in an inactive window.

2) we need to make sure, the highlighting won't get overwritten, so
make the highlighter aware of this situation as well, by appending the
buffer number to the group name, if it creates the 'inactive' mode
groups and a buffer number has been given.

this fixes #1233
2016-09-08 18:46:11 +02:00
Christian Brabandt
168b18ff0a Merge pull request #1223 from chrisbra/fix_prepend_sep
don't add a second separator if not needed
2016-09-05 20:22:28 +02:00
Christian Brabandt
c0cb03f48b don't add a second separator if not needed
Using let g:airline_section_y = airline#section#create_right(['ffenc','%{strftime("%H:%M")}'])
will result in an output string of `utf-8[unix] < < 00:00`

This happens, because the function util#prepend() will eventually add an
extra separator, if the width is zero. Therefore, when building the
string, remember, if the last section added an extra separator and only
add one, if there hasn't been added one before.

fixes #1220
2016-09-05 20:20:44 +02:00
Christian Brabandt
54e4772ef8 Merge pull request #1239 from chrisbra/1230
Do not cache gitgutter values
2016-09-05 19:32:24 +02:00
Christian Brabandt
5eaf658b9c Merge pull request #1240 from chrisbra/1226
Add User autocommand for Theme changing
2016-09-05 19:32:13 +02:00
Christian Brabandt
f6155d11fb Merge pull request #1242 from JulienPivard/correctionRefresh
`:AirlineRefresh` not work correctly
2016-09-05 19:31:54 +02:00
Ythildyr
afb75adc11 :AirlineRefresh not work correctly
If active buffer is modified, `:AirlineRefresh` apply `normal` highlight
instead of `normal_modified` highlight.

No particular config is requiered to reproduce this bug.

I see this bug with option `g:airline_skip_empty_sections` set.
Add any modification at the active buffer return to normal mode,
**do not save** and wait a few seconds, you can see highlight change to
normal but file is modified.

Without option `g:airline_skip_empty_sections`, add any modification at
the active buffer return to normal mode and type `:AirlineRefresh` you
can see change to bad highlight .
2016-08-28 14:41:45 +02:00
Christian Brabandt
ea98b42a0d Note on adjusting statusline for syntastic
The syntastic plugin recommends to adjust the statusline.
This does not apply for vim-airline for obvious reasons. Therefore
mention that this recommendation does not apply for us.
2016-08-24 21:32:38 +02:00
Christian Brabandt
7612aaf701 Add User autocommand for Theme changing
fixes #1226
2016-08-24 21:27:49 +02:00
Christian Brabandt
43e3ef5428 Do not cache gitgutter values
fixes #1230
2016-08-24 21:22:28 +02:00
Christian Brabandt
d00f7b35d2 Merge pull request #1224 from S3RB31/master
Updated documentation
2016-08-03 21:57:36 +02:00
͏
36c7f5a2a3 Updated documentation
Added notice regarding issue #1219
2016-08-02 15:57:44 +02:00
Christian Brabandt
62fa44f8b3 Merge pull request #1217 from wcn3/master
Add Go to the list of C-like languages.
2016-07-26 19:21:33 +02:00
Bill Neubauer
460ed02864 Add Go to the list of C-like languages. 2016-07-26 10:06:40 +09:00
Christian Brabandt
4b5441a8f7 Merge pull request #1211 from JulienPivard/patch-1
Hunks not show in airline with signify and option g:airline#extension…
2016-07-25 10:00:48 +02:00
Julien Pivard
53dcd8a49c Hunks won't appear if g:airline_skip_empty_sections = 1 2016-07-24 21:15:10 +02:00
Christian Brabandt
657cf773ad Merge pull request #1206 from chrisbra/width
Cache hunk values, shorten for small windows
2016-07-24 10:08:40 +02:00
Christian Brabandt
797ad1ea79 Merge pull request #1207 from chrisbra/ctrlspace
Map keys in ctrlspace mode
2016-07-24 10:07:36 +02:00
Christian Brabandt
64188c395f Merge pull request #1216 from chrisbra/skip_empty_sections
disable refresh function, if airline has been disabled
2016-07-24 10:01:20 +02:00
Christian Brabandt
62eb44a9d6 disable refresh function, if airline has been disabled
fixes #1213
2016-07-24 09:58:52 +02:00
Christian Brabandt
4d0c4f6b1e Merge pull request #1197 from chrisbra/eclim
Cache eclim errorlist
2016-07-04 20:29:08 +02:00
Christian Brabandt
fdd29caef4 shorten filetype for smaller screens 2016-07-03 21:32:33 +02:00
Christian Brabandt
a6c04644ef Map keys in ctrlspace mode
fixes #1181
2016-07-03 21:09:42 +02:00
Christian Brabandt
8fda614d0d Cache hunk values, shorten for small windows
Cache the hunk values. In case of short windows, shorten the hunk string
a little bit and make the branch extension take the hunk value into
account when deciding how much to shorten it.
2016-07-03 20:44:05 +02:00
Christian Brabandt
a710cb99dd Merge pull request #1205 from blueyed/fix-1204
tabline: do not change the signature of get_buffer_name
2016-07-02 20:19:47 +02:00
Daniel Hahler
63dc4ba2a4 tabline: do not change the signature of get_buffer_name
Thanks to @wsdjeg about notifying me in
https://github.com/vim-airline/vim-airline/commit/e1f7bf#commitcomment-18104843.

Fixes: https://github.com/vim-airline/vim-airline/issues/1204.
2016-07-02 16:24:47 +02:00
Christian Brabandt
e1f7bffe71 Merge pull request #1189 from blueyed/tabline-only-handle-visible-buffer-names
Tabline performance: only pass in visible buffers to formatters
2016-07-02 10:57:50 +02:00
Christian Brabandt
c6f5d8b823 Merge pull request #1202 from chrisbra/resolve_symlink
Try to resolve symlinks for git
2016-07-02 10:55:49 +02:00
Christian Brabandt
98b329daf1 Merge pull request #1203 from chrisbra/small_screen
small screen adjustments
2016-07-02 10:55:27 +02:00
Christian Brabandt
e715bce77b Shorten section z in small windows 2016-07-02 10:20:19 +02:00
Christian Brabandt
409e8b0cbd refactor shortening code 2016-07-02 10:20:07 +02:00
Christian Brabandt
5b00d54cd6 If window is too small, shorten branch name 2016-07-02 10:19:43 +02:00
Christian Brabandt
fadd737a29 Merge pull request #1201 from chrisbra/ycm
call YCM function only if they are defined
2016-07-01 11:54:09 +02:00
Christian Brabandt
ece61f346e Try to resolve symlinks for git 2016-07-01 11:52:07 +02:00
Christian Brabandt
fbfea6daee Merge pull request #1200 from chrisbra/width
limit whitespace check output for smaller screens
2016-07-01 11:17:16 +02:00
Christian Brabandt
39f046664d Merge pull request #1196 from chrisbra/tabenter
Reset w:airline_active on TabEnter
2016-07-01 11:11:35 +02:00
Christian Brabandt
bc095bcde1 limit whitespace check output for smaller screens
Sometimes, if a buffer triggers many whitespace check warnings,
and the Vim window size is too small, other parts of the statusline
might become unreadable.

Therefore, if the window size is smaller than say 120 characters
and the whitespace warning > 9 chars, limit it to 10 characters
and inidicate, that there is more to come
2016-07-01 11:10:51 +02:00
Christian Brabandt
5c24c3c504 call YCM function only if they are defined
fixes #1187 by making sure, we only call functions, that actually exist.

Should make vim-airline work with lady loaded YCM, e.g. using vim-plug:

```viml
" Code to execute when the plugin is loaded on demand
Plug 'Valloric/YouCompleteMe', { 'for': 'cpp' }
autocmd! User YouCompleteMe if !has('vim_starting') | call youcompleteme#Enable() | endif
```
2016-06-24 11:49:53 +02:00
Christian Brabandt
72b316c871 Cache eclim errorlist
fixes #1193
2016-06-24 11:43:20 +02:00
Christian Brabandt
41df6668c7 Reset w:airline_active on TabEnter
fixes #1182
2016-06-23 18:09:01 +02:00
Daniel Hahler
8d681c7119 Tabline performance: only pass in visible buffers to formatters
This only passes in the list of visible buffers on that tab, which
reduces the processing a lot if you have a lot of buffers opened.
2016-06-17 15:07:55 +02:00
Christian Brabandt
7b9b68f15d Merge pull request #1185 from blueyed/performance-highlight
Some minor performance fixes for the highlighter
2016-06-07 19:58:27 +02:00
Daniel Hahler
f51f73773d airline#highlighter#exec: do not build cmd always 2016-06-06 20:41:33 +02:00
Daniel Hahler
429cfcd71e minor: do not copy args in s:get_array 2016-06-06 20:40:51 +02:00
Christian Brabandt
6c8f33f192 Merge pull request #1183 from HarmtH/ctrlspace-clickbuf
update ctrlspace bufferline to use clickbuf()
2016-06-02 21:41:53 +02:00
Harm te Hennepe
74aacca55d update ctrlspace bufferline to use clickbuf() 2016-06-02 16:00:00 +02:00
Christian Brabandt
64f06309b1 Merge pull request #1180 from ratijas/master
add obsession extension
2016-05-30 19:58:07 +02:00
ivan tkachenko
5a170c5ef0 add obsession extension 2016-05-30 03:44:39 +08:00
Christian Brabandt
4d39cb6f20 Merge pull request #1175 from chrisbra/1174
vim 7.3 does not allow getwinvar with 3 args
2016-05-22 21:37:10 +02:00
Christian Brabandt
985f3d3eca b:airline_head sometimes undefined
Make sure, b:airline_head variable is set, also it is initially set in
this function earlier. But see #1171 for an error.

Therefore, before checking if the variable is empty, make sure it
exists.

fixes #1171
2016-05-22 21:29:00 +02:00
Christian Brabandt
83b6dd11a8 vim 7.3 does not allow getwinvar with 3 args
use airline#util#getwinvar instead, fixes #1174
2016-05-22 21:26:34 +02:00
Christian Brabandt
70c16f4c46 Reset mode when resizing
fixes #1156
2016-05-15 11:13:29 +02:00
Christian Brabandt
8d8d9afaef Merge pull request #1170 from drmikehenry/master
Add the b:airline_whitespace_disabled feature.
2016-05-15 11:11:41 +02:00
Michael Henry
e67b2847ea Add the b:airline_whitespace_disabled feature.
If the per-buffer variable b:airline_whitespace_disabled is defined
and non-zero, whitespace checking will be disabled for that buffer.
2016-05-14 15:56:48 -04:00
Christian Brabandt
ba94fa12b9 Merge pull request #1165 from chrisbra/1162
Add quickfix title to inactive statusline
2016-05-13 20:41:51 +02:00
Christian Brabandt
eef069d7bc reset w:airline_active variable on TabEnter
fixes #1159
2016-05-13 14:41:31 +02:00
Christian Brabandt
99cd26cda4 Merge pull request #1166 from chrisbra/nomodeline
Use <nomodeline> if possible in :doautocmd
2016-05-13 11:24:29 +02:00
Christian Brabandt
46f854fc83 Use <nomodeline> if possible in :doautocmd
prevents closing of folds on CursorHold autocommand
when skip_empty sections is true
2016-05-13 11:22:12 +02:00
Christian Brabandt
bd4cb97e85 Add quickfix title to inactive statusline
fixes #1162
2016-05-13 10:08:54 +02:00
Christian Brabandt
0d05196426 Merge pull request #1160 from wsdjeg/master
Fix neovim true color support
2016-05-13 08:24:58 +02:00
Christian Brabandt
4ca34804b2 Merge pull request #1161 from chrisbra/1157
fix adding space padding to section caused by PR1157
2016-05-12 21:42:37 +02:00
Christian Brabandt
727208d766 Do not draw separators for empty sections
This is a little bit a hack, because by the time the separators are
added, it is not clear, if the following section is empty, therefore
we need to parse the content of the following section and eval the
expressions to find out, if this is empty

Remarks:
- catch all exceptions when eval'ing statusline

- make sure, that the seperators are highlighted
  even when skipping empty regions (highlight group
  names need to be adjusted)

- if a section is defined as empty, it will be removed completly from
  the statusline. This means, it won't be called on the next update
  and may not refresh properly (e.g. when the whitespace check
  triggers, therefore, the whitesapce extension has to call an
  explicit redraw whenever it is supposed to be refreshed)
2016-05-12 21:40:56 +02:00
Christian Brabandt
a4840f1585 fix adding space padding to section caused by PR1157
fixes #1158
2016-05-12 21:35:28 +02:00
wsdjeg
62dfab26de Fix old version neovim support 2016-05-12 23:06:35 +08:00
wsdjeg
8171fcaf2e Fix neovim true color support 2016-05-12 22:32:04 +08:00
Christian Brabandt
811e51575c Merge pull request #1157 from cenk/padding
do not add padding to section name if empty
2016-05-10 22:58:53 +02:00
Cenk Alti
2d7f5b2cc1 do not add padding to section name if empty 2016-05-08 04:52:35 +03:00
Christian Brabandt
30f078daf5 Document g:airline_symbols.maxlinenr 2016-04-30 15:08:29 +02:00
Christian Brabandt
eaf2034163 Merge pull request #1148 from chrisbra/1131
Make sure the statusline option is correct
2016-04-29 09:18:41 +02:00
Christian Brabandt
cf5632bb94 Merge pull request #1152 from chrisbra/1146
Check that default value exists, before accessing it
2016-04-29 09:17:35 +02:00
Christian Brabandt
9bcb6ae64e Merge pull request #1147 from hanxueluo/master
put file path in quotes when call "system()"
2016-04-29 09:12:42 +02:00
hanhuanle
a8dfdd40b7 shellescape file path when call "system()"
"system()" called by "get_git_untracked" and "get_hg_untracked" fails
sometimes. It reports error "Can't open file /tmp/***".
The root cause is that the file path for system() contains some unordinary
character and lacks quotes.
2016-04-28 23:14:32 +08:00
Christian Brabandt
64a3bfd439 Make sure the statusline option is correct
should fix #1131 completely, but literally comparing the
statusline option with the expected value
2016-04-28 07:17:44 +02:00
Christian Brabandt
d36085a5b0 Merge pull request #1145 from chrisbra/1144
call refresh function on window resize event
2016-04-27 21:29:02 +02:00
Christian Brabandt
9dfc4d0c04 Merge pull request #1136 from chrisbra/pr1103
add total line next to line number
2016-04-27 20:52:04 +02:00
oldratlee
ad3eee7e72 add total line next to line number
An alternative approach to PR1103
2016-04-27 20:49:49 +02:00
Christian Brabandt
057b429b02 Check that default value exists, before accessing it
closes #1146
2016-04-27 20:11:40 +02:00
Christian Brabandt
b91f729586 call refresh function on window resize event
fixes #1144
2016-04-26 21:05:03 +02:00
Christian Brabandt
81b58028f0 Merge pull request #1140 from chrisbra/1131
Check the value of the 'stl' setting on SessionLoadPost
2016-04-21 20:09:48 +02:00
Christian Brabandt
a5f7b9520a Check the value of the 'stl' setting on SessionLoadPost
Restoring a session using vim -S with 'sessionopts' including options,
might overwrite the statusline function.

fixes #1131
2016-04-21 20:03:42 +02:00
Christian Brabandt
86e7d19df1 Merge pull request #1138 from chrisbra/1127
don't throw error if bufferline is not installed
2016-04-21 09:41:47 +02:00
Christian Brabandt
e1627d2144 Merge pull request #1139 from chrisbra/doc
Updated issue template
2016-04-21 09:41:11 +02:00
Christian Brabandt
1b9035cc51 Updated issue template
ask more terminal related questions
2016-04-21 09:40:37 +02:00
Christian Brabandt
b8c1b26f0e don't throw error if bufferline is not installed
airline#extensions#load() tries to load all extensions,
the user has specified in g:airline_extensions.
However, if e.g. bufferline is requested to be loaded, but
is not installed, it will throw an error
E117: Unknown function: airline#extensions#bufferline#init

Therefore, catch E117 and show a warning.

closes #1127
2016-04-21 09:30:23 +02:00
Christian Brabandt
1e77e6cbcc Merge pull request #1133 from blueyed/on_window_changed-only-once
Update each window only once in s:on_window_changed.
2016-04-20 21:31:52 +02:00
Christian Brabandt
39039aceb2 Merge pull request #1134 from blueyed/function-bang
Add bang to function definitions
2016-04-20 21:31:02 +02:00
Daniel Hahler
5652b576b0 Add bang to function definitions
This makes it easier to reload the files, e.g. via vim-scriptease's
`:Runtime`.
2016-04-20 21:10:28 +02:00
Daniel Hahler
abcb3c4bb3 Update each window only once in s:on_window_changed.
We might come there several times for different autocommands.

The key uses bufnr/winnr and the number of total windows, and is stored
for the tab.
2016-04-20 21:06:04 +02:00
Christian Brabandt
95237f6604 Merge pull request #1132 from chrisbra/pr1110
Made c_like_langs customisable via g:airline#extenstions#c_like_langs
2016-04-20 20:46:04 +02:00
John Byrne
a5fab144aa Made c_like_langs customisable via g:airline#extenstions#c_like_langs 2016-04-20 20:44:50 +02:00
Christian Brabandt
3f2247593a Merge pull request #1117 from 987poiuytrewq/middle_click_buffers
Make middle clickable buffers (only Neovim)
2016-04-19 23:33:11 +02:00
Duncan Williams
0c251e20a7 Add middle click to close buffer functionality
Extended the left click to switch buffer functionality to also
support middle click to delete buffer

documentation of clickable buffers
2016-04-19 20:49:01 +01:00
Christian Brabandt
1bb8b6278e Merge pull request #1119 from shanesmith/tabsOnLeftColour
Fix tabs theming
2016-04-12 09:15:35 +02:00
Shane Smith
a79e35b5e3 Fix tabs theming 2016-04-11 18:22:42 -04:00
Christian Brabandt
168dd7970a Merge pull request #1116 from othrayte/java-mixed-indent
Add Java as an exception in mixed-indent-file
2016-04-07 16:30:57 +02:00
Adrian Cowan
066d936076 Add Java as an exception in mixed-indent-file
Java allows "/** */"-style comments; add it as an exception in mixed-indent-file.
2016-04-07 14:55:39 +10:00
Christian Brabandt
377010ea6e Merge pull request #1105 from octurion/cuda-patch
Add CUDA as an exception in mixed-indent-file
2016-04-05 21:44:09 +02:00
Christian Brabandt
f402b78be9 Merge pull request #1113 from SevereOverfl0w/patch-1
Add asciidoc to default wordcount filetype
2016-04-05 21:43:22 +02:00
Dominic Monroe
8f83231078 Add asciidoc to default wordcount filetype 2016-04-05 13:14:48 +01:00
Alexandros Tasos
dba50e9eea Add CUDA as an exception in mixed-indent-file 2016-03-24 23:53:13 +02:00
Christian Brabandt
842e562359 Merge pull request #1092 from tamul/mixed-indent-ld
extensions#whitespace: fix .ld mixed indent false positive
2016-03-23 15:09:05 +01:00
Christian Brabandt
5ee24f5d87 Merge pull request #1093 from wesQ3/windowswap-update
windowswap: use new tab-aware API if WS is up to date
2016-03-23 15:08:32 +01:00
Christian Brabandt
9afebc9233 Merge pull request #1097 from HarmtH/tablineat-for-ctrlspace
tablineat() support for ctrlspace tabline
2016-03-23 15:08:07 +01:00
Christian Brabandt
79899c76bf Merge pull request #1101 from dterei/master
Add spell detection
2016-03-23 15:07:31 +01:00
Christian Brabandt
b2461f612e Merge pull request #1102 from joshuarubin/patch-1
Add support for getting tab title from t:title
2016-03-23 14:56:29 +01:00
Joshua Rubin
73146e3e73 Add support for getting tab title from t:title
Uses `gettabvar` to get tab name.
2016-03-22 12:14:47 -06:00
David Terei
ae4a978509 Add spell detection 2016-03-21 23:52:04 -07:00
Harm te Hennepe
bc7aa0c812 tablineat() support with ctrlspace tabline 2016-03-19 17:38:53 +01:00
Wes Malone
582958d6c5 windowswap: use new tab-aware API if WS is current 2016-03-16 19:27:54 -05:00
Tayler Mulligan
c8048973cd extensions#whitespace: fix .ld mixed indent false positive
Similar to #1065 and #1081, adds link scripts to be excluded.

Adds a list containing C-like languages to ignore, which implement
multiline comments as:
/*
 *
 ...
 */

Comment below filetype check reflects all exclusions (c-like)
2016-03-16 16:19:55 -07:00
64 changed files with 1774 additions and 306 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
doc/tags
*.lock
.vim-flavor
*.swp

View File

@@ -3,7 +3,14 @@
- vim: ????
- vim-airline: ????
- OS: ????
- Have you reproduced with a minimal vimrc: ???
- What is your airline configuration: ???
if you are using terminal:
- terminal: ????
- $TERM variable: ???
- color configuration (:set t_Co?):
if you are using Neovim:
- does it happen in Vim: ???
#### actual behavior

View File

@@ -12,7 +12,7 @@ Lean &amp; mean status/tabline for vim that's light as air.
[undotree][17], [nerdtree][18], [tagbar][19], [vim-gitgutter][29],
[vim-signify][30], [quickfixsigns][39], [syntastic][5], [eclim][34],
[lawrencium][21], [virtualenv][31], [tmuxline][35], [taboo.vim][37],
[ctrlspace][38] and more.
[ctrlspace][38], [vim-bufmru][47], [vimagit][50], [denite][51] and more.
* Looks good with regular fonts and provides configuration points so you can use unicode or powerline symbols.
* Optimized for speed; it loads in under a millisecond.
* Extensive suite of themes for popular color schemes including [solarized][23] (dark and light), [tomorrow][24] (all variants), [base16][32] (all variants), [molokai][25], [jellybeans][26] and others.
@@ -72,6 +72,9 @@ vim-airline integrates with a variety of plugins out of the box. These extensio
#### [unite.vim][9]
![image](https://f.cloud.github.com/assets/306502/962319/4d7d3a7e-04ed-11e3-9d59-ab29cb310ff8.png)
#### [denite.nvim][51]
![image](https://cloud.githubusercontent.com/assets/246230/23939717/f65bce6e-099c-11e7-85c3-918dbc839392.png)
#### [tagbar][19]
![image](https://f.cloud.github.com/assets/306502/962150/7e7bfae6-04ea-11e3-9e28-32af206aed80.png)
@@ -84,6 +87,9 @@ vim-airline integrates with a variety of plugins out of the box. These extensio
#### hunks ([vim-gitgutter][29] & [vim-signify][30])
![image](https://f.cloud.github.com/assets/306502/995185/73fc7054-09b9-11e3-9d45-618406c6ed98.png)
#### [vimagit][50]
![vim-airline-vimagit-demo](https://cloud.githubusercontent.com/assets/533068/22107273/2ea85ba0-de4d-11e6-9fa8-331103b88df4.gif)
#### [virtualenv][31]
![image](https://f.cloud.github.com/assets/390964/1022566/cf81f830-0d98-11e3-904f-cf4fe3ce201e.png)
@@ -96,6 +102,12 @@ vim-airline integrates with a variety of plugins out of the box. These extensio
#### [ctrlspace][38]
![papercolor_with_ctrlspace](https://cloud.githubusercontent.com/assets/493242/12912041/7fc3c6ec-cf16-11e5-8775-8492b9c64ebf.png)
#### [xkb-switch][48]/[xkb-layout][49]
![image](https://cloud.githubusercontent.com/assets/5715281/22061422/347e7842-ddb8-11e6-8bdb-7abbd418653c.gif)
#### [vimtex][53]
![image](https://cloud.githubusercontent.com/assets/1798172/25799740/e77d5c2e-33ee-11e7-8660-d34ce4c5f13f.png)
## Extras
vim-airline also supplies some supplementary stand-alone extensions. In addition to the tabline extension mentioned earlier, there is also:
@@ -139,19 +151,16 @@ I wrote the initial version on an airplane, and since it's light as air it turne
This plugin follows the standard runtime path structure, and as such it can be installed with a variety of plugin managers:
* [Pathogen][11]
* `git clone https://github.com/vim-airline/vim-airline ~/.vim/bundle/vim-airline`
* Remember to run `:Helptags` to generate help tags
* [NeoBundle][12]
* `NeoBundle 'vim-airline/vim-airline'`
* [Vundle][13]
* `Plugin 'vim-airline/vim-airline'`
* [Plug][40]
* `Plug 'vim-airline/vim-airline'`
* [VAM][22]
* `call vam#ActivateAddons([ 'vim-airline' ])`
* manual
* copy all of the files into your `~/.vim` directory
| Plugin Manager | Install with... |
| ------------- | ------------- |
| [Pathogen][11] | `git clone https://github.com/vim-airline/vim-airline ~/.vim/bundle/vim-airline`<br/>Remember to run `:Helptags` to generate help tags |
| [NeoBundle][12] | `NeoBundle 'vim-airline/vim-airline'` |
| [Vundle][13] | `Plugin 'vim-airline/vim-airline'` |
| [Plug][40] | `Plug 'vim-airline/vim-airline'` |
| [VAM][22] | `call vam#ActivateAddons([ 'vim-airline' ])` |
| [Dein][52] | `call dein#add('vim-airline/vim-airline')` |
| [minpac][54] | `call minpac#add('vim-airline/vim-airline')` |
| manual | copy all of the files into your `~/.vim` directory |
# Configuration
@@ -194,9 +203,7 @@ If you are interested in becoming a maintainer (we always welcome more maintaine
# License
MIT License. Copyright (c) 2013-2016 Bailey Ling.
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/vim-airline/vim-airline/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
MIT License. Copyright (c) 2013-2017 Bailey Ling & Contributors.
[1]: https://github.com/Lokaltog/vim-powerline
[2]: https://github.com/Lokaltog/powerline
@@ -210,7 +217,7 @@ MIT License. Copyright (c) 2013-2016 Bailey Ling.
[10]: https://github.com/ctrlpvim/ctrlp.vim
[11]: https://github.com/tpope/vim-pathogen
[12]: https://github.com/Shougo/neobundle.vim
[13]: https://github.com/gmarik/vundle
[13]: https://github.com/VundleVim/Vundle.vim
[14]: https://github.com/vim-airline/vim-airline/wiki/Screenshots
[15]: https://github.com/techlivezheng/vim-plugin-minibufexpl
[16]: https://github.com/sjl/gundo.vim
@@ -244,3 +251,11 @@ MIT License. Copyright (c) 2013-2016 Bailey Ling.
[44]: https://github.com/mhartington
[45]: https://github.com/vim-airline/vim-airline/commit/d7fd8ca649e441b3865551a325b10504cdf0711b
[46]: https://github.com/vim-airline/vim-airline#themes
[47]: https://github.com/mildred/vim-bufmru
[48]: https://github.com/ierton/xkb-switch
[49]: https://github.com/vovkasm/input-source-switcher
[50]: https://github.com/jreybert/vimagit
[51]: https://github.com/Shougo/denite.nvim
[52]: https://github.com/Shougo/dein.vim
[53]: https://github.com/lervag/vimtex
[54]: https://github.com/k-takata/minpac/

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let g:airline_statusline_funcrefs = get(g:, 'airline_statusline_funcrefs', [])
let s:sections = ['a','b','c','gutter','x','y','z', 'error', 'warning']
@@ -65,6 +67,8 @@ function! airline#switch_theme(name)
let w:airline_lastmode = ''
call airline#load_theme()
silent doautocmd User AirlineAfterTheme
" this is required to prevent clobbering the startup info message, i don't know why...
call airline#check_mode(winnr())
endfunction
@@ -107,11 +111,8 @@ function! airline#update_statusline()
call s:invoke_funcrefs(context, s:inactive_funcrefs)
endfor
unlet! w:airline_render_left
unlet! w:airline_render_right
for section in s:sections
unlet! w:airline_section_{section}
endfor
unlet! w:airline_render_left w:airline_render_right
exe 'unlet! ' 'w:airline_section_'. join(s:sections, ' w:airline_section_')
let w:airline_active = 1
let context = { 'winnr': winnr(), 'active': 1, 'bufnr': winbufnr(winnr()) }
@@ -142,6 +143,11 @@ function! airline#statusline(winnr)
endfunction
function! airline#check_mode(winnr)
if !exists("s:airline_run")
let s:airline_run = 0
endif
let s:airline_run += 1
let context = s:contexts[a:winnr]
if get(w:, 'airline_active', 1)
@@ -175,17 +181,27 @@ function! airline#check_mode(winnr)
call add(l:mode, 'crypt')
endif
if g:airline_detect_spell && &spell
call add(l:mode, 'spell')
endif
if &readonly || ! &modifiable
call add(l:mode, 'readonly')
endif
let mode_string = join(l:mode)
if s:airline_run < 3
" skip this round.
" When this function is run too early after startup,
" it forces a redraw by vim which will remove the intro screen.
let w:airline_lastmode = mode_string
return ''
endif
if get(w:, 'airline_lastmode', '') != mode_string
call airline#highlighter#highlight_modified_inactive(context.bufnr)
call airline#highlighter#highlight(l:mode)
call airline#highlighter#highlight(l:mode, context.bufnr)
let w:airline_lastmode = mode_string
endif
return ''
endfunction

View File

@@ -1,21 +1,37 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
" min percentage width per section
let g:section_width = get(g:, 'airline#extensions#default#section_width', {
\ 'a': {'pct': 7},
\ 'b': {'pct': 10},
\ 'c': {'pct': 25},
\ 'x': {'pct': 7},
\ 'y': {'pct': 11},
\ 'z': {'pct': 15},
\ 'warning': {'pct': 10},
\ 'error': {'pct': 10},
\ 'gutter': {'pct': 5},
\ })
let s:prototype = {}
function! s:prototype.split(...)
function! s:prototype.split(...) dict
call add(self._sections, ['|', a:0 ? a:1 : '%='])
endfunction
function! s:prototype.add_section_spaced(group, contents)
call self.add_section(a:group, (g:airline_symbols.space).a:contents.(g:airline_symbols.space))
function! s:prototype.add_section_spaced(group, contents) dict
let spc = empty(a:contents) ? '' : g:airline_symbols.space
call self.add_section(a:group, spc.a:contents.spc)
endfunction
function! s:prototype.add_section(group, contents)
function! s:prototype.add_section(group, contents) dict
call add(self._sections, [a:group, a:contents])
endfunction
function! s:prototype.add_raw(text)
function! s:prototype.add_raw(text) dict
call add(self._sections, ['', a:text])
endfunction
@@ -31,18 +47,39 @@ function! s:get_prev_group(sections, i)
return ''
endfunction
function! s:prototype.build()
function! s:prototype.build() dict
let side = 1
let line = ''
let i = 0
let length = len(self._sections)
let split = 0
let is_empty = 0
let prev_group = ''
while i < length
let section = self._sections[i]
let group = section[0]
let contents = section[1]
let pgroup = prev_group
let prev_group = s:get_prev_group(self._sections, i)
if group ==# 'airline_c' && !self._context.active && has_key(self._context, 'bufnr')
let group = 'airline_c'. self._context.bufnr
elseif prev_group ==# 'airline_c' && !self._context.active && has_key(self._context, 'bufnr')
let prev_group = 'airline_c'. self._context.bufnr
endif
if is_empty
let prev_group = pgroup
endif
let is_empty = s:section_is_empty(self, contents)
if is_empty
" need to fix highlighting groups, since we
" have skipped a section, we actually need
" the previous previous group and so the
" seperator goes from the previous previous group
" to the current group
let pgroup = group
endif
if group == ''
let line .= contents
@@ -54,18 +91,24 @@ function! s:prototype.build()
if prev_group == ''
let line .= '%#'.group.'#'
elseif split
let line .= s:get_transitioned_seperator(self, prev_group, group, side)
if !is_empty
let line .= s:get_transitioned_seperator(self, prev_group, group, side)
endif
let split = 0
else
let line .= s:get_seperator(self, prev_group, group, side)
if !is_empty
let line .= s:get_seperator(self, prev_group, group, side)
endif
endif
let line .= s:get_accented_line(self, group, contents)
let contents = s:calculate_max_width(self, contents, group)
let line .= is_empty ? '' : s:get_accented_line(self, group, contents)
endif
let i = i + 1
endwhile
if !self._context.active
"let line = substitute(line, '%#airline_c#', '%#airline_c'.self._context.bufnr.'#', '')
let line = substitute(line, '%#.\{-}\ze#', '\0_inactive', 'g')
endif
return line
@@ -118,6 +161,84 @@ function! s:get_accented_line(self, group, contents)
return line
endfunction
function! s:calculate_section_width()
if get(b:, 'airline_winwidth', 0) != winwidth(0)
let winwidth = winwidth(0)
for key in keys(g:section_width)
let g:section_width[key]['width'] = float2nr(winwidth * (g:section_width[key]['pct']/100.0))
endfor
let b:airline_winwidth = winwidth
endif
endfunction
function! s:calculate_max_width(self, content, key)
if a:self._context.active == 0 ||
\ get(a:self._context, 'tabline', 0)
return a:content
endif
call s:calculate_section_width()
if winwidth(0) >= 100
" only truncate sections for window width < 100
return a:content
endif
let section_key = matchstr(a:key, 'airline_\zs.*')
let width = g:section_width[section_key]['width']
if section_key == 'c'
" for the buffername, use a min-width
return '%-'.(width > 50 ? 50 : width).'.('.a:content.'%)'
else
" the rest takes a maxwidth
return '%-.'.width.'('.a:content.'%)'
endif
endfunction
function! s:section_is_empty(self, content)
let start=1
" do not check for inactive windows or the tabline
if a:self._context.active == 0
return 0
elseif get(a:self._context, 'tabline', 0)
return 0
endif
" only check, if airline#skip_empty_sections == 1
if get(g:, 'airline_skip_empty_sections', 0) == 0
return 0
endif
" only check, if airline#skip_empty_sections == 1
if get(w:, 'airline_skip_empty_sections', -1) == 0
return 0
endif
" assume accents sections to be never empty
" (avoides, that on startup the mode message becomes empty)
if match(a:content, '%#__accent_[^#]*#.*__restore__#') > -1
return 0
endif
if empty(a:content)
return 1
endif
let list=matchlist(a:content, '%{\zs.\{-}\ze}', 1, start)
if empty(list)
return 0 " no function in statusline text
endif
while len(list) > 0
let expr = list[0]
try
" catch all exceptions, just in case
if !empty(eval(expr))
return 0
endif
catch
return 0
endtry
let start += 1
let list=matchlist(a:content, '%{\zs.\{-}\ze}', 1, start)
endw
return 1
endfunction
function! airline#builder#new(context)
let builder = copy(s:prototype)
let builder._context = a:context
@@ -131,4 +252,3 @@ function! airline#builder#new(context)
\ }, 'keep')
return builder
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
function! airline#debug#profile1()
profile start airline-profile-switch.log
profile func *

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:ext = {}
let s:ext._theme_funcrefs = []
@@ -118,28 +120,42 @@ function! s:sync_active_winnr()
endfunction
function! airline#extensions#load()
let loaded_ext = []
" non-trivial number of external plugins use eventignore=all, so we need to account for that
autocmd CursorMoved * call <sid>sync_active_winnr()
if exists('g:airline_extensions')
for ext in g:airline_extensions
call airline#extensions#{ext}#init(s:ext)
try
call airline#extensions#{ext}#init(s:ext)
catch /^Vim\%((\a\+)\)\=:E117/ " E117, function does not exist
call airline#util#warning("Extension '".ext."' not installed, ignoring!")
endtry
endfor
return
endif
call airline#extensions#quickfix#init(s:ext)
call add(loaded_ext, 'quickfix')
if get(g:, 'loaded_unite', 0)
call airline#extensions#unite#init(s:ext)
call add(loaded_ext, 'unite')
endif
if get(g:, 'loaded_denite', 0)
call airline#extensions#denite#init(s:ext)
call add(loaded_ext, 'denite')
endif
if exists(':NetrwSettings')
call airline#extensions#netrw#init(s:ext)
call add(loaded_ext, 'netrw')
endif
if get(g:, 'airline#extensions#ycm#enabled', 0)
call airline#extensions#ycm#init(s:ext)
call add(loaded_ext, 'ycm')
endif
if get(g:, 'loaded_vimfiler', 0)
@@ -148,33 +164,46 @@ function! airline#extensions#load()
if get(g:, 'loaded_ctrlp', 0)
call airline#extensions#ctrlp#init(s:ext)
call add(loaded_ext, 'ctrlp')
endif
if get(g:, 'CtrlSpaceLoaded', 0)
call airline#extensions#ctrlspace#init(s:ext)
call add(loaded_ext, 'ctrlspace')
endif
if get(g:, 'command_t_loaded', 0)
call airline#extensions#commandt#init(s:ext)
call add(loaded_ext, 'commandt')
endif
if exists(':UndotreeToggle')
call airline#extensions#undotree#init(s:ext)
call add(loaded_ext, 'undotree')
endif
if get(g:, 'airline#extensions#hunks#enabled', 1)
\ && (exists('g:loaded_signify') || exists('g:loaded_gitgutter') || exists('g:loaded_changes') || exists('g:loaded_quickfixsigns'))
call airline#extensions#hunks#init(s:ext)
call add(loaded_ext, 'hunks')
endif
if get(g:, 'airline#extensions#vimagit#enabled', 1)
\ && (exists('g:loaded_magit'))
call airline#extensions#vimagit#init(s:ext)
call add(loaded_ext, 'vimagit')
endif
if get(g:, 'airline#extensions#tagbar#enabled', 1)
\ && exists(':TagbarToggle')
call airline#extensions#tagbar#init(s:ext)
call add(loaded_ext, 'tagbar')
endif
if get(g:, 'airline#extensions#csv#enabled', 1)
\ && (get(g:, 'loaded_csv', 0) || exists(':Table'))
call airline#extensions#csv#init(s:ext)
call add(loaded_ext, 'csv')
endif
if exists(':VimShell')
@@ -186,64 +215,105 @@ function! airline#extensions#load()
\ && (exists('*fugitive#head') || exists('*lawrencium#statusline') ||
\ (get(g:, 'airline#extensions#branch#use_vcscommand', 0) && exists('*VCSCommandGetStatusLine')))
call airline#extensions#branch#init(s:ext)
call add(loaded_ext, 'branch')
endif
if get(g:, 'airline#extensions#bufferline#enabled', 1)
\ && exists('*bufferline#get_status_string')
call airline#extensions#bufferline#init(s:ext)
call add(loaded_ext, 'bufferline')
endif
if (get(g:, 'airline#extensions#virtualenv#enabled', 1) && (exists(':VirtualEnvList') || isdirectory($VIRTUAL_ENV)))
call airline#extensions#virtualenv#init(s:ext)
call add(loaded_ext, 'virtualenv')
endif
if (get(g:, 'airline#extensions#eclim#enabled', 1) && exists(':ProjectCreate'))
call airline#extensions#eclim#init(s:ext)
call add(loaded_ext, 'eclim')
endif
if get(g:, 'airline#extensions#syntastic#enabled', 1)
\ && exists(':SyntasticCheck')
call airline#extensions#syntastic#init(s:ext)
call add(loaded_ext, 'syntastic')
endif
if (get(g:, 'airline#extensions#ale#enabled', 1) && exists(':ALELint'))
call airline#extensions#ale#init(s:ext)
call add(loaded_ext, 'ale')
endif
if get(g:, 'airline#extensions#whitespace#enabled', 1)
call airline#extensions#whitespace#init(s:ext)
call add(loaded_ext, 'whitespace')
endif
if (get(g:, 'airline#extensions#neomake#enabled', 1) && exists(':Neomake'))
call airline#extensions#neomake#init(s:ext)
call add(loaded_ext, 'neomake')
endif
if get(g:, 'airline#extensions#po#enabled', 1) && executable('msgfmt')
call airline#extensions#po#init(s:ext)
call add(loaded_ext, 'po')
endif
if get(g:, 'airline#extensions#wordcount#enabled', 1)
call airline#extensions#wordcount#init(s:ext)
call add(loaded_ext, 'wordcount')
endif
if get(g:, 'airline#extensions#tabline#enabled', 0)
call airline#extensions#tabline#init(s:ext)
call add(loaded_ext, 'tabline')
endif
if get(g:, 'airline#extensions#tmuxline#enabled', 1) && exists(':Tmuxline')
call airline#extensions#tmuxline#init(s:ext)
call add(loaded_ext, 'tmuxline')
endif
if get(g:, 'airline#extensions#promptline#enabled', 1) && exists(':PromptlineSnapshot') && len(get(g:, 'airline#extensions#promptline#snapshot_file', ''))
call airline#extensions#promptline#init(s:ext)
call add(loaded_ext, 'promptline')
endif
if get(g:, 'airline#extensions#nrrwrgn#enabled', 1) && exists(':NR') == 2
call airline#extensions#nrrwrgn#init(s:ext)
call add(loaded_ext, 'nrrwrgn')
endif
if get(g:, 'airline#extensions#unicode#enabled', 1) && exists(':UnicodeTable') == 2
call airline#extensions#unicode#init(s:ext)
call add(loaded_ext, 'nrrwrgn')
endif
if (get(g:, 'airline#extensions#capslock#enabled', 1) && exists('*CapsLockStatusline'))
call airline#extensions#capslock#init(s:ext)
call add(loaded_ext, 'capslock')
endif
if (get(g:, 'airline#extensions#xkblayout#enabled', 1) && exists('g:XkbSwitchLib'))
call airline#extensions#xkblayout#init(s:ext)
call add(loaded_ext, 'xkblayout')
endif
if (get(g:, 'airline#extensions#windowswap#enabled', 1) && get(g:, 'loaded_windowswap', 0))
call airline#extensions#windowswap#init(s:ext)
call add(loaded_ext, 'windowswap')
endif
if (get(g:, 'airline#extensions#obsession#enabled', 1) && exists('*ObsessionStatus'))
call airline#extensions#obsession#init(s:ext)
call add(loaded_ext, 'obsession')
endif
runtime autoload/vimtex.vim
if (get(g:, 'airline#extensions#vimtex#enabled', 1)) && exists('*vimtex#init')
call airline#extensions#vimtex#init(s:ext)
call add(loaded_ext, 'vimtex')
endif
if !get(g:, 'airline#extensions#disable_rtp_load', 0)
@@ -255,7 +325,8 @@ function! airline#extensions#load()
if stridx(tolower(resolve(fnamemodify(file, ':p'))), s:script_path) < 0
\ && stridx(tolower(fnamemodify(file, ':p')), s:script_path) < 0
let name = fnamemodify(file, ':t:r')
if !get(g:, 'airline#extensions#'.name.'#enabled', 1)
if !get(g:, 'airline#extensions#'.name.'#enabled', 1) ||
\ index(loaded_ext, name) > -1
continue
endif
try

View File

@@ -0,0 +1,43 @@
" MIT License. Copyright (c) 2013-2017 Bjorn Neergaard, w0rp
" vim: et ts=2 sts=2 sw=2
let s:error_symbol = get(g:, 'airline#extensions#ale#error_symbol', 'E:')
let s:warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', 'W:')
function! airline#extensions#ale#get(type)
if !exists(':ALELint')
return ''
endif
let l:is_err = a:type ==# 'error'
let l:counts = ale#statusline#Count(bufnr(''))
let l:symbol = l:is_err ? s:error_symbol : s:warning_symbol
if type(l:counts) == type({}) && has_key(l:counts, 'error')
" Use the current Dictionary format.
let l:errors = l:counts.error + l:counts.style_error
let l:num = l:is_err ? l:errors : l:counts.total - l:errors
else
" Use the old List format.
let l:num = l:is_err ? l:counts[0] : l:counts[1]
endif
if l:num == 0
return ''
else
return l:symbol . l:num
endif
endfunction
function! airline#extensions#ale#get_warning()
return airline#extensions#ale#get('warning')
endfunction
function! airline#extensions#ale#get_error()
return airline#extensions#ale#get('error')
endfunction
function! airline#extensions#ale#init(ext)
call airline#parts#define_function('ale_error_count', 'airline#extensions#ale#get_error')
call airline#parts#define_function('ale_warning_count', 'airline#extensions#ale#get_warning')
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" MIT License. Copyright (c) 2013-2016 Bailey Ling et al.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:has_fugitive = exists('*fugitive#head')
let s:has_lawrencium = exists('*lawrencium#statusline')
let s:has_vcscommand = get(g:, 'airline#extensions#branch#use_vcscommand', 0) && exists('*VCSCommandGetStatusLine')
@@ -9,9 +11,58 @@ if !s:has_fugitive && !s:has_lawrencium && !s:has_vcscommand
finish
endif
let s:git_dirs = {}
let s:untracked_git = {}
let s:untracked_hg = {}
let s:has_async = airline#util#async
" s:vcs_config contains static configuration of VCSes and their status relative
" to the active file.
" 'branch' - The name of currently active branch. This field is empty iff it
" has not been initialized yet or the current file is not in
" an active branch.
" 'untracked' - Cache of untracked files represented as a dictionary with files
" as keys. A file has a not exists symbol set as its value if it
" is untracked. A file is present in this dictionary iff its
" status is considered up to date.
" 'untracked_mark' - used as regexp to test against the output of 'cmd'
let s:vcs_config = {
\ 'git': {
\ 'exe': 'git',
\ 'cmd': 'git status --porcelain -- ',
\ 'untracked_mark': '??',
\ 'update_branch': 's:update_git_branch',
\ 'exclude': '\.git',
\ 'branch': '',
\ 'untracked': {},
\ },
\ 'mercurial': {
\ 'exe': 'hg',
\ 'cmd': 'hg status -u -- ',
\ 'untracked_mark': '?',
\ 'exclude': '\.hg',
\ 'update_branch': 's:update_hg_branch',
\ 'branch': '',
\ 'untracked': {},
\ },
\}
" Initializes b:buffer_vcs_config. b:buffer_vcs_config caches the branch and
" untracked status of the file in the buffer. Caching those fields is necessary,
" because s:vcs_config may be updated asynchronously and s:vcs_config fields may
" be invalid during those updates. b:buffer_vcs_config fields are updated
" whenever corresponding fields in s:vcs_config are updated or an inconsistency
" is detected during update_* operation.
"
" b:airline_head caches the head string it is empty iff it needs to be
" recalculated. b:airline_head is recalculated based on b:buffer_vcs_config.
function! s:init_buffer()
let b:buffer_vcs_config = {}
for vcs in keys(s:vcs_config)
let b:buffer_vcs_config[vcs] = {
\ 'branch': '',
\ 'untracked': '',
\ }
endfor
unlet! b:airline_head
endfunction
let s:head_format = get(g:, 'airline#extensions#branch#format', 0)
if s:head_format == 1
@@ -32,15 +83,19 @@ else
endfunction
endif
function! s:get_git_branch(path)
let s:git_dirs = {}
function! s:update_git_branch(path)
if !s:has_fugitive
return ''
let s:vcs_config['git'].branch = ''
return
endif
let name = fugitive#head(7)
if empty(name)
if has_key(s:git_dirs, a:path)
return s:git_dirs[a:path]
let s:vcs_config['git'].branch = s:git_dirs[a:path]
return
endif
let dir = fugitive#extract_git_dir(a:path)
@@ -62,76 +117,201 @@ function! s:get_git_branch(path)
endif
let s:git_dirs[a:path] = name
return name
let s:vcs_config['git'].branch = name
endfunction
function! s:get_git_untracked(file)
let untracked = ''
if empty(a:file)
return untracked
endif
if has_key(s:untracked_git, a:file)
let untracked = s:untracked_git[a:file]
function! s:update_hg_branch(path)
if s:has_lawrencium
let stl=lawrencium#statusline()
if !empty(stl) && s:has_async
call s:get_mq_async('LC_ALL=C hg qtop', expand('%:p'))
endif
if exists("s:mq") && !empty(s:mq)
if stl is# 'default'
" Shorten default a bit
let stl='def'
endif
let stl.=' ['.s:mq.']'
endif
let s:vcs_config['mercurial'].branch = stl
else
let output = system('git status --porcelain -- '. a:file)
if output[0:1] is# '??' && output[3:-2] is? a:file
let untracked = get(g:, 'airline#extensions#branch#notexists', g:airline_symbols.notexists)
endif
let s:untracked_git[a:file] = untracked
let s:vcs_config['mercurial'].branch = ''
endif
return untracked
endfunction
function! s:get_hg_untracked(file)
if s:has_lawrencium
" delete cache when unlet b:airline head?
let untracked = ''
if empty(a:file)
return untracked
function! s:update_branch()
let l:path = exists("*fnamemodify") ? fnamemodify(resolve(@%), ":p:h") : expand("%:p:h")
for vcs in keys(s:vcs_config)
call {s:vcs_config[vcs].update_branch}(l:path)
if b:buffer_vcs_config[vcs].branch != s:vcs_config[vcs].branch
let b:buffer_vcs_config[vcs].branch = s:vcs_config[vcs].branch
unlet! b:airline_head
endif
if has_key(s:untracked_hg, a:file)
let untracked = s:untracked_hg[a:file]
endfor
endfunction
function! s:update_untracked_in_buffer_config(file, vcs)
if !has_key(s:vcs_config[a:vcs].untracked, a:file)
return
elseif s:vcs_config[a:vcs].untracked[a:file] != b:buffer_vcs_config[a:vcs].untracked
let b:buffer_vcs_config[a:vcs].untracked = s:vcs_config[a:vcs].untracked[a:file]
unlet! b:airline_head
endif
endfunction
function! s:update_untracked()
let l:file = expand("%:p")
if empty(l:file) || isdirectory(l:file)
return
endif
let l:needs_update = 1
for vcs in keys(s:vcs_config)
if l:file =~ s:vcs_config[vcs].exclude
" Skip check for files that live in the exclude directory
let l:needs_update = 0
endif
if has_key(s:vcs_config[vcs].untracked, l:file)
let l:needs_update = 0
call s:update_untracked_in_buffer_config(l:file, vcs)
endif
endfor
if !l:needs_update
return
endif
for vcs in keys(s:vcs_config)
let l:config = s:vcs_config[vcs]
if s:has_async
" Note that asynchronous update updates s:vcs_config only, and only
" s:update_untracked updates b:buffer_vcs_config. If s:vcs_config is
" invalidated again before s:update_untracked is called, then we lose the
" result of the previous call, i.e. the head string is not updated. It
" doesn't happen often in practice, so we let it be.
call s:get_vcs_untracked_async(l:config, l:file)
else
let untracked = (system('hg status -u -- '. a:file)[0] is# '?' ?
\ get(g:, 'airline#extensions#branch#notexists', g:airline_symbols.notexists) : '')
let s:untracked_hg[a:file] = untracked
let output = airline#util#system(l:config.cmd . shellescape(l:file))
if output =~? ('^' . l:config.untracked_mark)
let l:config.untracked[l:file] = get(g:, 'airline#extensions#branch#notexists', g:airline_symbols.notexists)
else
let l:config.untracked[l:file] = ''
endif
call s:update_untracked_in_buffer_config(l:file, vcs)
endif
return untracked
endif
endfor
endfunction
function! s:get_hg_branch()
if s:has_lawrencium
return lawrencium#statusline()
endif
return ''
endfunction
if s:has_async
let s:jobs = {}
function! s:on_stdout(channel, msg) dict abort
let self.buf .= a:msg
endfunction
function! s:on_exit(channel) dict abort
if self.buf =~? ('^' . self.config['untracked_mark'])
let self.config.untracked[self.file] = get(g:, 'airline#extensions#branch#notexists', g:airline_symbols.notexists)
else
let self.config.untracked[self.file] = ''
endif
" b:buffer_vcs_config will be updated on next call of update_untracked if
" needed
if has_key(s:jobs, self.file)
call remove(s:jobs, self.file)
endif
endfunction
function! s:get_vcs_untracked_async(config, file)
if g:airline#util#is_windows && &shell =~ 'cmd'
let cmd = a:config['cmd'] . shellescape(a:file)
else
let cmd = ['sh', '-c', a:config['cmd'] . shellescape(a:file)]
endif
let options = {'config': a:config, 'buf': '', 'file': a:file}
if has_key(s:jobs, a:file)
if job_status(get(s:jobs, a:file)) == 'run'
return
elseif has_key(s:jobs, a:file)
call remove(s:jobs, a:file)
endif
endif
let id = job_start(cmd, {
\ 'err_io': 'out',
\ 'out_cb': function('s:on_stdout', options),
\ 'close_cb': function('s:on_exit', options)})
let s:jobs[a:file] = id
endfu
function! s:on_exit_mq(channel) dict abort
if !empty(self.buf)
if self.buf is# 'no patches applied' ||
\ self.buf =~# "unknown command 'qtop'"
let self.buf = ''
elseif exists("s:mq") && s:mq isnot# self.buf
" make sure, statusline is updated
unlet! b:airline_head
endif
let s:mq = self.buf
endif
if has_key(s:jobs, self.file)
call remove(s:jobs, self.file)
endif
endfunction
function! s:get_mq_async(cmd, file)
if g:airline#util#is_windows && &shell =~ 'cmd'
let cmd = a:cmd
else
let cmd = ['sh', '-c', a:cmd]
endif
let options = {'cmd': a:cmd, 'buf': '', 'file': a:file}
if has_key(s:jobs, a:file)
if job_status(get(s:jobs, a:file)) == 'run'
return
elseif has_key(s:jobs, a:file)
call remove(s:jobs, a:file)
endif
endif
let id = job_start(cmd, {
\ 'err_io': 'out',
\ 'out_cb': function('s:on_stdout', options),
\ 'close_cb': function('s:on_exit_mq', options)})
let s:jobs[a:file] = id
endfu
endif
function! airline#extensions#branch#head()
if !exists('b:buffer_vcs_config')
call s:init_buffer()
endif
call s:update_branch()
call s:update_untracked()
if exists('b:airline_head') && !empty(b:airline_head)
return b:airline_head
endif
let b:airline_head = ''
let l:heads = {}
let l:vcs_priority = get(g:, "airline#extensions#branch#vcs_priority", ["git", "mercurial"])
let found_fugitive_head = 0
let l:git_head = s:get_git_branch(expand("%:p:h"))
let l:hg_head = s:get_hg_branch()
let l:heads = {}
for vcs in l:vcs_priority
if !empty(b:buffer_vcs_config[vcs].branch)
let l:heads[vcs] = b:buffer_vcs_config[vcs].branch
endif
endfor
if !empty(l:git_head)
let found_fugitive_head = 1
let l:heads.git = (!empty(l:hg_head) ? "git:" : '') . s:format_name(l:git_head)
let l:git_untracked = s:get_git_untracked(expand("%:p"))
let l:heads.git .= l:git_untracked
endif
if !empty(l:hg_head)
let l:heads.mercurial = (!empty(l:git_head) ? "hg:" : '') . s:format_name(l:hg_head)
let l:hg_untracked = s:get_hg_untracked(expand("%:p"))
let l:heads.mercurial.= l:hg_untracked
endif
for vcs in keys(l:heads)
if !empty(b:airline_head)
let b:airline_head .= ' | '
endif
let b:airline_head .= (len(l:heads) > 1 ? s:vcs_config[l:vcs].exe .':' : '') . s:format_name(l:heads[l:vcs])
let b:airline_head .= b:buffer_vcs_config[vcs].untracked
endfor
if empty(l:heads)
if s:has_vcscommand
@@ -140,15 +320,6 @@ function! airline#extensions#branch#head()
let b:airline_head = s:format_name(get(b:VCSCommandBufferInfo, 0, ''))
endif
endif
else
for vcs in l:vcs_priority
if has_key(l:heads, vcs)
if !empty(b:airline_head)
let b:airline_head = b:airline_head . " | "
endif
let b:airline_head = b:airline_head . l:heads[vcs]
endif
endfor
endif
if exists("g:airline#extensions#branch#displayed_head_limit")
@@ -158,9 +329,11 @@ function! airline#extensions#branch#head()
endif
endif
if empty(b:airline_head) || !found_fugitive_head && !s:check_in_path()
if has_key(l:heads, 'git') && !s:check_in_path()
let b:airline_head = ''
endif
let minwidth = empty(get(b:, 'airline_hunks', '')) ? 14 : 7
let b:airline_head = airline#util#shorten(b:airline_head, 120, minwidth)
return b:airline_head
endfunction
@@ -174,7 +347,7 @@ function! airline#extensions#branch#get_head()
endfunction
function! s:check_in_path()
if !exists('b:airline_branch_path')
if !exists('b:airline_file_in_root')
let root = get(b:, 'git_dir', get(b:, 'mercurial_dir', ''))
let bufferpath = resolve(fnamemodify(expand('%'), ':p'))
@@ -184,7 +357,13 @@ function! s:check_in_path()
let root = expand(fnamemodify(root, ':h'))
else
" else it's the newer format, and we need to guesstimate
let pattern = '\.git\(\\\|\/\)modules\(\\\|\/\)'
" 1) check for worktrees
if match(root, 'worktrees') > -1
" worktree can be anywhere, so simply assume true here
return 1
endif
" 2) check for submodules
let pattern = '\.git[\\/]\(modules\)[\\/]'
if match(root, pattern) >= 0
let root = substitute(root, pattern, '', '')
endif
@@ -196,13 +375,27 @@ function! s:check_in_path()
return b:airline_file_in_root
endfunction
function! s:reset_untracked_cache()
if exists("s:untracked_git")
let s:untracked_git={}
endif
if exists("s:untracked_hg")
let s:untracked_hg={}
function! s:reset_untracked_cache(shellcmdpost)
" shellcmdpost - whether function was called as a result of ShellCmdPost hook
if !s:has_async && !has('nvim')
if a:shellcmdpost
" Clear cache only if there was no error or the script uses an
" asynchronous interface. Otherwise, cache clearing would overwrite
" v:shell_error with a system() call inside get_*_untracked.
if v:shell_error
return
endif
endif
endif
let l:file = expand("%:p")
for vcs in keys(s:vcs_config)
" Dump the value of the cache for the current file. Partially mitigates the
" issue of cache invalidation happening before a call to
" s:update_untracked()
call s:update_untracked_in_buffer_config(l:file, l:vcs)
let s:vcs_config[vcs].untracked = {}
endfor
endfunction
function! airline#extensions#branch#init(ext)
@@ -211,5 +404,6 @@ function! airline#extensions#branch#init(ext)
autocmd BufReadPost * unlet! b:airline_file_in_root
autocmd CursorHold,ShellCmdPost,CmdwinLeave * unlet! b:airline_head
autocmd User AirlineBeforeRefresh unlet! b:airline_head
autocmd BufWritePost,ShellCmdPost * call s:reset_untracked_cache()
autocmd BufWritePost * call s:reset_untracked_cache(0)
autocmd ShellCmdPost * call s:reset_untracked_cache(1)
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists('*bufferline#get_status_string')
finish
endif
@@ -18,6 +20,10 @@ function! airline#extensions#bufferline#init(ext)
let g:bufferline_separator = g:airline_symbols.space
endif
call airline#parts#define_raw('file', '%{bufferline#refresh_status()}'.bufferline#get_status_string())
if exists("+autochdir") && &autochdir == 1
" if 'acd' is set, vim-airline uses the path section, so we need ot redefine this here as well
call airline#parts#define_raw('path', '%{bufferline#refresh_status()}'.bufferline#get_status_string())
else
call airline#parts#define_raw('file', '%{bufferline#refresh_status()}'.bufferline#get_status_string())
endif
endfunction

View File

@@ -1,5 +1,8 @@
" MIT License. Copyright (c) 2014 Mathias Andersson.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists('*CapsLockStatusline')
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'command_t_loaded', 0)
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_csv', 0) && !exists(':Table')
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_ctrlp', 0)
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:spc = g:airline_symbols.space
let s:padding = s:spc . s:spc . s:spc

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:section_use_groups = get(g:, 'airline#extensions#default#section_use_groupitems', 1)
let s:section_truncate_width = get(g:, 'airline#extensions#default#section_truncate_width', {
\ 'b': 79,
@@ -22,6 +24,9 @@ function! s:get_section(winnr, key, ...)
endif
endif
let spc = g:airline_symbols.space
if !exists('g:airline_section_{a:key}')
return ''
endif
let text = airline#util#getwinvar(a:winnr, 'airline_section_'.a:key, g:airline_section_{a:key})
let [prefix, suffix] = [get(a:000, 0, '%('.spc), get(a:000, 1, spc.'%)')]
return empty(text) ? '' : prefix.text.suffix
@@ -37,26 +42,27 @@ function! s:build_sections(builder, context, keys)
endfunction
" There still is a highlighting bug when using groups %(%) in the statusline,
" deactivate it, until this is properly fixed:
" https://groups.google.com/d/msg/vim_dev/sb1jmVirXPU/mPhvDnZ-CwAJ
" deactivate it, unless it is fixed (7.4.1511)
if s:section_use_groups && (v:version >= 704 || (v:version >= 703 && has('patch81')))
function s:add_section(builder, context, key)
function! s:add_section(builder, context, key)
let condition = (a:key is# "warning" || a:key is# "error") &&
\ (v:version == 704 && !has("patch1511"))
" i have no idea why the warning section needs special treatment, but it's
" needed to prevent separators from showing up
if ((a:key == 'error' || a:key == 'warning') && empty(s:get_section(a:context.winnr, a:key)))
return
endif
if (a:key == 'warning' || a:key == 'error')
if condition
call a:builder.add_raw('%(')
endif
call a:builder.add_section('airline_'.a:key, s:get_section(a:context.winnr, a:key))
if (a:key == 'warning' || a:key == 'error')
if condition
call a:builder.add_raw('%)')
endif
endfunction
else
" older version don't like the use of %(%)
function s:add_section(builder, context, key)
function! s:add_section(builder, context, key)
if ((a:key == 'error' || a:key == 'warning') && empty(s:get_section(a:context.winnr, a:key)))
return
endif

View File

@@ -0,0 +1,47 @@
" MIT License. Copyright (c) 2017 Thomas Dy
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_denite', 0)
finish
endif
" Denite does not use vim's built-in modal editing but has a custom prompt
" that implements its own insert/normal mode so we have to handle changing the
" highlight
function! airline#extensions#denite#check_denite_mode(bufnr)
let l:mode = split(denite#get_status_mode(), ' ')
let l:mode = tolower(l:mode[1])
if !exists('b:denite_mode_cache') || l:mode != b:denite_mode_cache
call airline#highlighter#highlight([l:mode], a:bufnr)
let b:denite_mode_cache = l:mode
endif
return ''
endfunction
function! airline#extensions#denite#apply(...)
if &ft == 'denite'
let w:airline_skip_empty_sections = 0
call a:1.add_section('airline_a', ' Denite %{airline#extensions#denite#check_denite_mode('.a:2['bufnr'].')}')
call a:1.add_section('airline_c', ' %{denite#get_status_sources()}')
call a:1.split()
call a:1.add_section('airline_y', ' %{denite#get_status_path()} ')
call a:1.add_section('airline_z', ' %{denite#get_status_linenr()} ')
return 1
endif
endfunction
function! airline#extensions#denite#init(ext)
call denite#custom#option('_', 'statusline', 0)
call a:ext.add_statusline_func('airline#extensions#denite#apply')
" airline#extensions#denite#apply normally gets called only after the
" denite window gets closed, so we have to call airline#update_statusline
" ourselves to make sure it's applied when the window is opened.
augroup airline_denite
autocmd!
autocmd FileType denite call airline#update_statusline()
augroup END
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':ProjectCreate')
finish
endif
@@ -16,7 +18,13 @@ function! airline#extensions#eclim#creat_line(...)
endfunction
function! airline#extensions#eclim#get_warnings()
" Cache vavlues, so that it isn't called too often
if exists("s:eclim_errors") &&
\ get(b:, 'airline_changenr', 0) == changenr()
return s:eclim_errors
endif
let eclimList = eclim#display#signs#GetExisting()
let s:eclim_errors = ''
if !empty(eclimList)
" Remove any non-eclim signs (see eclim#display#signs#Update)
@@ -39,11 +47,12 @@ function! airline#extensions#eclim#get_warnings()
let errorsNumber = len(eclimList)
let errors = "[Eclim:" . type . " line:".string(errorsLine)." (".string(errorsNumber).")]"
if !exists(':SyntasticCheck') || SyntasticStatuslineFlag() == ''
return errors.(g:airline_symbols.space)
let s:eclim_errors = errors.(g:airline_symbols.space)
endif
endif
endif
return ''
let b:airline_changenr = changenr()
return s:eclim_errors
endfunction
function! airline#extensions#eclim#init(ext)

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
" we don't actually want this loaded :P
finish

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_signify', 0) && !get(g:, 'loaded_gitgutter', 0) && !get(g:, 'loaded_changes', 0) && !get(g:, 'loaded_quickfixsigns', 0)
finish
endif
@@ -45,7 +47,7 @@ function! s:get_hunks_empty()
endfunction
function! s:get_hunks()
if !exists('b:source_func')
if !exists('b:source_func') || get(b:, 'source_func', '') is# 's:get_hunks_empty'
if get(g:, 'loaded_signify') && sy#buffer_is_active()
let b:source_func = 's:get_hunks_signify'
elseif exists('*GitGutterGetHunkSummary')
@@ -65,19 +67,30 @@ function! airline#extensions#hunks#get_hunks()
if !get(w:, 'airline_active', 0)
return ''
endif
" Cache vavlues, so that it isn't called too often
if exists("b:airline_hunks") &&
\ get(b:, 'airline_changenr', 0) == changenr() &&
\ winwidth(0) == get(s:, 'airline_winwidth', 0) &&
\ get(b:, 'source_func', '') isnot# 's:get_hunks_signify' &&
\ get(b:, 'source_func', '') isnot# 's:get_hunks_gitgutter' &&
\ get(b:, 'source_func', '') isnot# 's:get_hunks_empty'
return b:airline_hunks
endif
let hunks = s:get_hunks()
let string = ''
if !empty(hunks)
for i in [0, 1, 2]
if s:non_zero_only == 0 || hunks[i] > 0
if (s:non_zero_only == 0 && winwidth(0) > 100) || hunks[i] > 0
let string .= printf('%s%s ', s:hunk_symbols[i], hunks[i])
endif
endfor
endif
let b:airline_hunks = string
let b:airline_changenr = changenr()
let s:airline_winwidth = winwidth(0)
return string
endfunction
function! airline#extensions#hunks#init(ext)
call airline#parts#define_function('hunks', 'airline#extensions#hunks#get_hunks')
endfunction

View File

@@ -0,0 +1,25 @@
" vim: et ts=2 sts=2 sw=2
if !exists(':Neomake')
finish
endif
let s:error_symbol = get(g:, 'airline#extensions#neomake#error_symbol', 'E:')
let s:warning_symbol = get(g:, 'airline#extensions#neomake#warning_symbol', 'W:')
function! airline#extensions#neomake#get_warnings()
let counts = neomake#statusline#LoclistCounts()
let warnings = get(counts, 'W', 0)
return warnings ? s:warning_symbol.warnings : ''
endfunction
function! airline#extensions#neomake#get_errors()
let counts = neomake#statusline#LoclistCounts()
let errors = get(counts, 'E', 0)
return errors ? s:error_symbol.errors : ''
endfunction
function! airline#extensions#neomake#init(ext)
call airline#parts#define_function('neomake_warning_count', 'airline#extensions#neomake#get_warnings')
call airline#parts#define_function('neomake_error_count', 'airline#extensions#neomake#get_errors')
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':NetrwSettings')
finish
endif
@@ -27,6 +29,6 @@ endfunction
function! airline#extensions#netrw#sortstring()
let order = (g:netrw_sort_direction =~ 'n') ? '+' : '-'
let order = (get(g:, 'netrw_sort_direction', 'n') =~ 'n') ? '+' : '-'
return g:netrw_sort_by . (g:airline_symbols.space) . '[' . order . ']'
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_nrrw_rgn', 0)
finish
endif

View File

@@ -0,0 +1,22 @@
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists('*ObsessionStatus')
finish
endif
let s:spc = g:airline_symbols.space
if !exists('g:airline#extensions#obsession#indicator_text')
let g:airline#extensions#obsession#indicator_text = '$'
endif
function! airline#extensions#obsession#init(ext)
call airline#parts#define_function('obsession', 'airline#extensions#obsession#get_status')
endfunction
function! airline#extensions#obsession#get_status()
return ObsessionStatus((g:airline#extensions#obsession#indicator_text . s:spc), '')
endfunction

View File

@@ -1,6 +1,62 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:has_async = airline#util#async
function! s:shorten()
if exists("g:airline#extensions#po#displayed_limit")
let w:displayed_po_limit = g:airline#extensions#po#displayed_limit
if len(b:airline_po_stats) > w:displayed_po_limit - 1
let b:airline_po_stats = b:airline_po_stats[0:(w:displayed_po_limit - 2)].(&encoding==?'utf-8' ? '…' : '.'). ']'
endif
endif
endfunction
if s:has_async
let s:jobs = {}
function! s:on_stdout(channel, msg) dict abort
let self.buf = a:msg
endfunction
function! s:on_exit(channel) dict abort
if !empty(self.buf)
let b:airline_po_stats = printf("[%s]", self.buf)
else
let b:airline_po_stats = ''
endif
if has_key(s:jobs, self.file)
call remove(s:jobs, self.file)
endif
call s:shorten()
endfunction
function! s:get_msgfmt_stat_async(cmd, file)
if g:airline#util#is_windows || !executable('msgfmt')
" no msgfmt on windows?
return
else
let cmd = ['sh', '-c', a:cmd. shellescape(a:file)]
endif
let options = {'buf': '', 'file': a:file}
if has_key(s:jobs, a:file)
if job_status(get(s:jobs, a:file)) == 'run'
return
elseif has_key(s:jobs, a:file)
call remove(s:jobs, a:file)
endif
endif
let id = job_start(cmd, {
\ 'err_io': 'out',
\ 'out_cb': function('s:on_stdout', options),
\ 'close_cb': function('s:on_exit', options)})
let s:jobs[a:file] = id
endfu
endif
function! airline#extensions#po#apply(...)
if &ft ==# 'po'
call airline#extensions#prepend_to_section('z', '%{airline#extensions#po#stats()}')
@@ -13,22 +69,23 @@ function! airline#extensions#po#stats()
return b:airline_po_stats
endif
let airline_po_stats = system('msgfmt --statistics -o /dev/null -- '. expand('%:p'))
if v:shell_error
return ''
endif
try
let b:airline_po_stats = '['. split(airline_po_stats, '\n')[0]. ']'
catch
let b:airline_po_stats = ''
endtry
if exists("g:airline#extensions#po#displayed_limit")
let w:displayed_po_limit = g:airline#extensions#po#displayed_limit
if len(b:airline_po_stats) > w:displayed_po_limit - 1
let b:airline_po_stats = b:airline_po_stats[0:(w:displayed_po_limit - 1)].(&encoding==?'utf-8' ? '…' : '.')
let cmd = 'msgfmt --statistics -o /dev/null -- '
if s:has_async
call s:get_msgfmt_stat_async(cmd, expand('%:p'))
else
let airline_po_stats = system(cmd. shellescape(expand('%:p')))
if v:shell_error
return ''
endif
try
let b:airline_po_stats = '['. split(airline_po_stats, '\n')[0]. ']'
let b:airline_po_stats = substitute(b:airline_po_stats, ' \(message\|translation\)s*\.*', '', 'g')
catch
let b:airline_po_stats = ''
endtry
call s:shorten()
endif
return b:airline_po_stats
return get(b:, 'airline_po_stats', '')
endfunction
function! airline#extensions#po#init(ext)

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':PromptlineSnapshot')
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let g:airline#extensions#quickfix#quickfix_text = 'Quickfix'
let g:airline#extensions#quickfix#location_text = 'Location'
@@ -15,9 +17,24 @@ endfunction
function! airline#extensions#quickfix#init(ext)
call a:ext.add_statusline_func('airline#extensions#quickfix#apply')
call a:ext.add_inactive_statusline_func('airline#extensions#quickfix#inactive_qf_window')
endfunction
function! airline#extensions#quickfix#inactive_qf_window(...)
if getbufvar(a:2.bufnr, '&filetype') is# 'qf' && !empty(airline#util#getwinvar(a:2.winnr, 'quickfix_title', ''))
call setwinvar(a:2.winnr, 'airline_section_c', '[%{get(w:, "quickfix_title", "")}] %f %m')
endif
endfunction
function! s:get_text()
if exists("*win_getid") && exists("*getwininfo")
let dict = getwininfo(win_getid())
if len(dict) > 0 && get(dict[0], 'quickfix', 0) && !get(dict[0], 'loclist', 0)
return g:airline#extensions#quickfix#quickfix_text
elseif len(dict) > 0 && get(dict[0], 'quickfix', 0) && get(dict[0], 'loclist', 0)
return g:airline#extensions#quickfix#location_text
endif
endif
redir => buffers
silent ls
redir END
@@ -34,4 +51,3 @@ function! s:get_text()
endfor
return ''
endfunction

View File

@@ -1,19 +1,43 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':SyntasticCheck')
finish
endif
function! airline#extensions#syntastic#get_warnings()
let errors = SyntasticStatuslineFlag()
if strlen(errors) > 0
return errors.(g:airline_symbols.space)
let s:error_symbol = get(g:, 'airline#extensions#syntastic#error_symbol', 'E:')
let s:warning_symbol = get(g:, 'airline#extensions#syntastic#warning_symbol', 'W:')
function! airline#extensions#syntastic#get_warning()
return airline#extensions#syntastic#get('warning')
endfunction
function! airline#extensions#syntastic#get_error()
return airline#extensions#syntastic#get('error')
endfunction
function! airline#extensions#syntastic#get(type)
let _backup = get(g:, 'syntastic_stl_format', '')
let is_err = (a:type is# 'error')
if is_err
let g:syntastic_stl_format = '%E{%e}'
else
let g:syntastic_stl_format = '%W{%w}'
endif
let cnt = SyntasticStatuslineFlag()
if !empty(_backup)
let g:syntastic_stl_format = _backup
endif
if cnt == 0
return ''
else
return (is_err ? s:error_symbol : s:warning_symbol).cnt
endif
return ''
endfunction
function! airline#extensions#syntastic#init(ext)
call airline#parts#define_function('syntastic', 'airline#extensions#syntastic#get_warnings')
call airline#parts#define_function('syntastic-warn', 'airline#extensions#syntastic#get_warning')
call airline#parts#define_function('syntastic-err', 'airline#extensions#syntastic#get_error')
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:formatter = get(g:, 'airline#extensions#tabline#formatter', 'default')
let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
let s:show_tabs = get(g:, 'airline#extensions#tabline#show_tabs', 1)
@@ -131,22 +133,31 @@ function! airline#extensions#tabline#title(n)
let title = TabooTabTitle(a:n)
endif
if empty(title) && exists('*gettabvar')
let title = gettabvar(a:n, 'title')
endif
if empty(title)
let buflist = tabpagebuflist(a:n)
let winnr = tabpagewinnr(a:n)
return airline#extensions#tabline#get_buffer_name(buflist[winnr - 1])
let all_buffers = airline#extensions#tabline#buflist#list()
return airline#extensions#tabline#get_buffer_name(
\ buflist[winnr - 1],
\ filter(buflist, 'index(all_buffers, v:val) != -1'))
endif
return title
endfunction
function! airline#extensions#tabline#get_buffer_name(nr)
return airline#extensions#tabline#formatters#{s:formatter}#format(a:nr, airline#extensions#tabline#buflist#list())
function! airline#extensions#tabline#get_buffer_name(nr, ...)
let buffers = a:0 ? a:1 : airline#extensions#tabline#buflist#list()
return airline#extensions#tabline#formatters#{s:formatter}#format(a:nr, buffers)
endfunction
function! airline#extensions#tabline#new_builder()
let builder_context = {
\ 'active' : 1,
\ 'tabline' : 1,
\ 'right_sep' : get(g:, 'airline#extensions#tabline#right_sep' , g:airline_right_sep),
\ 'right_alt_sep' : get(g:, 'airline#extensions#tabline#right_alt_sep', g:airline_right_alt_sep),
\ }

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:show_buffers = get(g:, 'airline#extensions#tabline#show_buffers', 1)
let s:buf_min_count = get(g:, 'airline#extensions#tabline#buffer_min_count', 0)
let s:tab_min_count = get(g:, 'airline#extensions#tabline#tab_min_count', 0)

View File

@@ -13,8 +13,7 @@ let s:current_modified = 0
let s:current_tabline = ''
let s:current_visible_buffers = []
let s:number_map = &encoding == 'utf-8'
\ ? {
let s:number_map = {
\ '0': '⁰',
\ '1': '¹',
\ '2': '²',
@@ -26,6 +25,8 @@ let s:number_map = &encoding == 'utf-8'
\ '8': '⁸',
\ '9': '⁹'
\ }
let s:number_map = &encoding == 'utf-8'
\ ? get(g:, 'airline#extensions#tabline#buffer_idx_format', s:number_map)
\ : {}
function! airline#extensions#tabline#buffers#off()
@@ -73,7 +74,7 @@ function! airline#extensions#tabline#buffers#get()
" Neovim feature: Have clickable buffers
if has("tablineat")
call b.add_raw('%'.nr.'@airline#extensions#tabline#buffers#switchbuf@')
call b.add_raw('%'.nr.'@airline#extensions#tabline#buffers#clickbuf@')
endif
if s:buffer_idx_mode
if len(s:number_map) > 0
@@ -96,6 +97,9 @@ function! airline#extensions#tabline#buffers#get()
if s:show_tab_type
call b.add_section_spaced('airline_tabtype', s:buffers_label)
endif
if tabpagenr('$') > 1
call b.add_section_spaced('airline_tabmod', printf('%s %d/%d', "tab", tabpagenr(), tabpagenr('$')))
endif
let s:current_bufnr = cur
let s:current_tabline = b.build()
@@ -180,7 +184,7 @@ function! s:jump_to_tab(offset)
endif
endfunction
function s:map_keys()
function! s:map_keys()
if s:buffer_idx_mode
noremap <silent> <Plug>AirlineSelectTab1 :call <SID>select_tab(0)<CR>
noremap <silent> <Plug>AirlineSelectTab2 :call <SID>select_tab(1)<CR>
@@ -196,10 +200,52 @@ function s:map_keys()
endif
endfunction
function airline#extensions#tabline#buffers#switchbuf(minwid, clicks, button, modifiers) abort
" Run the following code only on a single left mouse button click without modifiers pressed
function! airline#extensions#tabline#buffers#clickbuf(minwid, clicks, button, modifiers) abort
" Clickable buffers
" works only in recent NeoVim with has('tablineat')
if a:clicks == 1 && a:button is# 'l' && a:modifiers !~# '[^ ]'
sil execute 'buffer' a:minwid
" single mouse button click without modifiers pressed
if a:clicks == 1 && a:modifiers !~# '[^ ]'
if a:button is# 'l'
" left button - switch to buffer
silent execute 'buffer' a:minwid
elseif a:button is# 'm'
" middle button - delete buffer
if get(g:, 'airline#extensions#tabline#middle_click_preserves_windows', 0) == 0
" just simply delete the clicked buffer. This will cause windows
" associated with the clicked buffer to be closed.
silent execute 'bdelete' a:minwid
else
" find windows displaying the clicked buffer and open an new
" buffer in them.
let current_window = bufwinnr("%")
let window_number = bufwinnr(a:minwid)
let last_window_visited = -1
" Set to 1 if the clicked buffer was open in any windows.
let buffer_in_window = 0
" Find the next window with the clicked buffer open. If bufwinnr()
" returns the same window number, this is because we clicked a new
" buffer, and then tried editing a new buffer. Vim won't create a
" new empty buffer for the same window, so we get the same window
" number from bufwinnr(). In this case we just give up and don't
" delete the buffer.
" This could be made cleaner if we could check if the clicked buffer
" is a new buffer, but I don't know if there is a way to do that.
while window_number != -1 && window_number != last_window_visited
let buffer_in_window = 1
silent execute window_number . 'wincmd w'
silent execute 'enew'
let last_window_visited = window_number
let window_number = bufwinnr(a:minwid)
endwhile
silent execute current_window . 'wincmd w'
if window_number != last_window_visited || buffer_in_window == 0
silent execute 'bdelete' a:minwid
endif
endif
endif
endif
endfunction

View File

@@ -1,8 +1,7 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
let s:excludes = get(g:, 'airline#extensions#tabline#excludes', [])
let s:exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1)
scriptencoding utf-8
function! airline#extensions#tabline#buflist#invalidate()
unlet! s:current_buffer_list
@@ -13,6 +12,9 @@ function! airline#extensions#tabline#buflist#list()
return s:current_buffer_list
endif
let excludes = get(g:, 'airline#extensions#tabline#excludes', [])
let exclude_preview = get(g:, 'airline#extensions#tabline#exclude_preview', 1)
let list = (exists('g:did_bufmru') && g:did_bufmru) ? BufMRUList() : range(1, bufnr("$"))
let buffers = []
@@ -26,9 +28,9 @@ function! airline#extensions#tabline#buflist#list()
" 2) buffer is a quickfix buffer
" 3) exclude preview windows (if 'bufhidden' == wipe
" and 'buftype' == nofile
if (!empty(s:excludes) && match(bufname(nr), join(s:excludes, '\|')) > -1) ||
if (!empty(excludes) && match(bufname(nr), join(excludes, '\|')) > -1) ||
\ (getbufvar(nr, 'current_syntax') == 'qf') ||
\ (s:exclude_preview && getbufvar(nr, '&bufhidden') == 'wipe'
\ (exclude_preview && getbufvar(nr, '&bufhidden') == 'wipe'
\ && getbufvar(nr, '&buftype') == 'nofile')
continue
endif

View File

@@ -57,6 +57,11 @@ function! airline#extensions#tabline#ctrlspace#add_buffer_section(builder, cur_t
endif
let buf_name = '%(%{airline#extensions#tabline#get_buffer_name('.buffer.index.')}%)'
if has("tablineat")
let buf_name = '%'.buffer.index.'@airline#extensions#tabline#buffers#clickbuf@'.buf_name.'%X'
endif
call a:builder.add_section_spaced(group, buf_name)
endfor
endfunction
@@ -83,13 +88,14 @@ function! airline#extensions#tabline#ctrlspace#add_tab_section(builder, pos)
endif
endif
call a:builder.add_section_spaced(group, tab.title.ctrlspace#api#TabBuffersNumber(tab.index))
call a:builder.add_section_spaced(group, '%'.tab.index.'T'.tab.title.ctrlspace#api#TabBuffersNumber(tab.index).'%T')
endfor
endfunction
function! airline#extensions#tabline#ctrlspace#get()
let cur_buf = bufnr('%')
call airline#extensions#tabline#tabs#map_keys()
let s:tab_list = ctrlspace#api#TabList()
for tab in s:tab_list
if tab.current

View File

@@ -1,7 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
let s:fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.')
scriptencoding utf-8
let s:fnamecollapse = get(g:, 'airline#extensions#tabline#fnamecollapse', 1)
let s:fnametruncate = get(g:, 'airline#extensions#tabline#fnametruncate', 0)
let s:buf_nr_format = get(g:, 'airline#extensions#tabline#buffer_nr_format', '%s: ')
@@ -9,6 +10,7 @@ let s:buf_nr_show = get(g:, 'airline#extensions#tabline#buffer_nr_show', 0)
let s:buf_modified_symbol = g:airline_symbols.modified
function! airline#extensions#tabline#formatters#default#format(bufnr, buffers)
let fmod = get(g:, 'airline#extensions#tabline#fnamemod', ':~:.')
let _ = ''
let name = bufname(a:bufnr)
@@ -16,9 +18,9 @@ function! airline#extensions#tabline#formatters#default#format(bufnr, buffers)
let _ .= '[No Name]'
else
if s:fnamecollapse
let _ .= substitute(fnamemodify(name, s:fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g')
let _ .= substitute(fnamemodify(name, fmod), '\v\w\zs.{-}\ze(\\|/)', '', 'g')
else
let _ .= fnamemodify(name, s:fmod)
let _ .= fnamemodify(name, fmod)
endif
if a:bufnr != bufnr('%') && s:fnametruncate && strlen(_) > s:fnametruncate
let _ = strpart(_, 0, s:fnametruncate)

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
function! airline#extensions#tabline#formatters#unique_tail#format(bufnr, buffers)
let duplicates = {}
let tails = {}

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:show_close_button = get(g:, 'airline#extensions#tabline#show_close_button', 1)
let s:show_tab_type = get(g:, 'airline#extensions#tabline#show_tab_type', 1)
let s:show_tab_nr = get(g:, 'airline#extensions#tabline#show_tab_nr', 1)
@@ -34,7 +36,7 @@ endfunction
function! airline#extensions#tabline#tabs#get()
let curbuf = bufnr('%')
let curtab = tabpagenr()
call s:map_keys()
call airline#extensions#tabline#tabs#map_keys()
if curbuf == s:current_bufnr && curtab == s:current_tabnr
if !g:airline_detect_modified || getbufvar(curbuf, '&modified') == s:current_modified
return s:current_tabline
@@ -45,17 +47,17 @@ function! airline#extensions#tabline#tabs#get()
for i in range(1, tabpagenr('$'))
if i == curtab
let group = 'airline_tabsel_right'
let group = 'airline_tabsel'
if g:airline_detect_modified
for bi in tabpagebuflist(i)
if getbufvar(bi, '&modified')
let group = 'airline_tabmod_right'
let group = 'airline_tabmod'
endif
endfor
endif
let s:current_modified = (group == 'airline_tabmod_right') ? 1 : 0
let s:current_modified = (group == 'airline_tabmod') ? 1 : 0
else
let group = 'airline_tab_right'
let group = 'airline_tab'
endif
let val = '%('
if s:show_tab_nr
@@ -81,7 +83,7 @@ function! airline#extensions#tabline#tabs#get()
if s:show_splits == 1
let buffers = tabpagebuflist(curtab)
for nr in buffers
let group = airline#extensions#tabline#group_of_bufnr(buffers, nr)
let group = airline#extensions#tabline#group_of_bufnr(buffers, nr) . "_right"
call b.add_section_spaced(group, '%(%{airline#extensions#tabline#get_buffer_name('.nr.')}%)')
endfor
elseif s:show_tab_type == 1
@@ -94,7 +96,7 @@ function! airline#extensions#tabline#tabs#get()
return s:current_tabline
endfunction
function s:map_keys()
function! airline#extensions#tabline#tabs#map_keys()
noremap <silent> <Plug>AirlineSelectTab1 :1tabn<CR>
noremap <silent> <Plug>AirlineSelectTab2 :2tabn<CR>
noremap <silent> <Plug>AirlineSelectTab3 :3tabn<CR>

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':TagbarToggle')
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':Tmuxline')
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists(':UndotreeToggle')
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_unicodePlugin', 0)
finish
endif

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !get(g:, 'loaded_unite', 0)
finish
endif

View File

@@ -0,0 +1,30 @@
" MIT License. Copyright (c) 2016 Jerome Reybert
" vim: et ts=2 sts=2 sw=2
" This plugin replace the whole section_a when in vimagit buffer
scriptencoding utf-8
if !get(g:, 'loaded_magit', 0)
finish
endif
function! airline#extensions#vimagit#init(ext)
call a:ext.add_statusline_func('airline#extensions#vimagit#apply')
endfunction
function! airline#extensions#vimagit#get_mode()
if ( b:magit_current_commit_mode == '' )
return "STAGING"
elseif ( b:magit_current_commit_mode == 'CC' )
return "COMMIT"
elseif ( b:magit_current_commit_mode == 'CA' )
return "AMEND"
else
return "???"
endfunction
function! airline#extensions#vimagit#apply(...)
if ( &filetype == 'magit' )
let w:airline_section_a = '%{airline#extensions#vimagit#get_mode()}'
endif
endfunction

View File

@@ -0,0 +1,81 @@
scriptencoding utf-8
let s:spc = g:airline_symbols.space
function! s:SetDefault(var, val)
if !exists(a:var)
execute 'let ' . a:var . '=' . string(a:val)
endif
endfunction
" Left and right delimiters (added only when status string is not empty)
call s:SetDefault( 'g:airline#extensions#vimtex#left', "{")
call s:SetDefault( 'g:airline#extensions#vimtex#right', "}")
" The current tex file is the main project file
call s:SetDefault( 'g:airline#extensions#vimtex#main', "" )
"
" The current tex file is a subfile of the project
" and the compilation is set for the main file
call s:SetDefault( 'g:airline#extensions#vimtex#sub_main', "m")
"
" The current tex file is a subfile of the project
" and the compilation is set for this subfile
call s:SetDefault( 'g:airline#extensions#vimtex#sub_local', "l")
"
" Compilation is running and continuous compilation is off
call s:SetDefault( 'g:airline#extensions#vimtex#compiled', "c₁")
" Compilation is running and continuous compilation is on
call s:SetDefault( 'g:airline#extensions#vimtex#continuous', "c")
" Viewer is opened
call s:SetDefault( 'g:airline#extensions#vimtex#viewer', "v")
function! airline#extensions#vimtex#init(ext)
call airline#parts#define_raw('vimtex', '%{airline#extensions#vimtex#get_scope()}')
call a:ext.add_statusline_func('airline#extensions#vimtex#apply')
endfunction
function! airline#extensions#vimtex#apply(...)
if exists("b:vimtex")
let w:airline_section_x = get(w:, 'airline_section_x', g:airline_section_x)
let w:airline_section_x.=s:spc.g:airline_left_alt_sep.s:spc.'%{airline#extensions#vimtex#get_scope()}'
endif
endfunction
function! airline#extensions#vimtex#get_scope()
let l:status = ''
let vt_local = get(b:, 'vimtex_local', {})
if empty(vt_local)
let l:status .= g:airline#extensions#vimtex#main
else
if get(vt_local, 'active')
let l:status .= g:airline#extensions#vimtex#sub_local
else
let l:status .= g:airline#extensions#vimtex#sub_main
endif
endif
if get(get(get(b:, 'vimtex', {}), 'viewer', {}), 'xwin_id')
let l:status .= g:airline#extensions#vimtex#viewer
endif
let l:compiler = get(get(b:, 'vimtex', {}), 'compiler', {})
if !empty(l:compiler)
if has_key(l:compiler, 'is_running') && b:vimtex.compiler.is_running()
if get(l:compiler, 'continuous')
let l:status .= g:airline#extensions#vimtex#continuous
else
let l:status .= g:airline#extensions#vimtex#compiled
endif
endif
endif
if !empty(l:status)
let l:status = g:airline#extensions#vimtex#left . l:status . g:airline#extensions#vimtex#right
endif
return l:status
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:spc = g:airline_symbols.space
function! airline#extensions#virtualenv#init(ext)

View File

@@ -3,20 +3,21 @@
" http://got-ravings.blogspot.com/2008/10/vim-pr0n-statusline-whitespace-flags.html
scriptencoding utf-8
let s:show_message = get(g:, 'airline#extensions#whitespace#show_message', 1)
let s:symbol = get(g:, 'airline#extensions#whitespace#symbol', g:airline_symbols.whitespace)
let s:default_checks = ['indent', 'trailing', 'mixed-indent-file']
let s:trailing_format = get(g:, 'airline#extensions#whitespace#trailing_format', 'trailing[%s]')
let s:mixed_indent_format = get(g:, 'airline#extensions#whitespace#mixed_indent_format', 'mixed-indent[%s]')
let s:long_format = get(g:, 'airline#extensions#whitespace#long_format', 'long[%s]')
let s:mixed_indent_file_format = get(g:, 'airline#extensions#whitespace#mixed_indent_file_format', 'mix-indent-file[%s]')
let s:trailing_format = get(g:, 'airline#extensions#whitespace#trailing_format', '[%s]trailing')
let s:mixed_indent_format = get(g:, 'airline#extensions#whitespace#mixed_indent_format', '[%s]mixed-indent')
let s:long_format = get(g:, 'airline#extensions#whitespace#long_format', '[%s]long')
let s:mixed_indent_file_format = get(g:, 'airline#extensions#whitespace#mixed_indent_file_format', '[%s]mix-indent-file')
let s:indent_algo = get(g:, 'airline#extensions#whitespace#mixed_indent_algo', 0)
let s:skip_check_ft = {'make': ['indent', 'mixed-indent-file'] }
let s:max_lines = get(g:, 'airline#extensions#whitespace#max_lines', 20000)
let s:enabled = get(g:, 'airline#extensions#whitespace#enabled', 1)
let s:c_like_langs = get(g:, 'airline#extensions#c_like_langs', [ 'c', 'cpp', 'cuda', 'go', 'javascript', 'ld', 'php' ])
function! s:check_mixed_indent()
if s:indent_algo == 1
@@ -35,8 +36,8 @@ function! s:check_mixed_indent()
endfunction
function! s:check_mixed_indent_file()
if stridx(&ft, 'c') == 0 || stridx(&ft, 'cpp') == 0 || stridx(&ft, 'javascript') == 0
" for C/CPP only allow /** */ comment style with one space before the '*'
if index(s:c_like_langs, &ft) > -1
" for C-like languages: allow /** */ comment style with one space before the '*'
let head_spc = '\v(^ +\*@!)'
else
let head_spc = '\v(^ +)'
@@ -52,12 +53,13 @@ endfunction
function! airline#extensions#whitespace#check()
if &readonly || !&modifiable || !s:enabled || line('$') > s:max_lines
\ || get(b:, 'airline_whitespace_disabled', 0)
return ''
endif
if !exists('b:airline_whitespace_check')
let b:airline_whitespace_check = ''
let checks = get(g:, 'airline#extensions#whitespace#checks', s:default_checks)
let checks = get(b:, 'airline_whitespace_checks', get(g:, 'airline#extensions#whitespace#checks', s:default_checks))
let trailing = 0
if index(checks, 'trailing') > -1
@@ -90,23 +92,29 @@ function! airline#extensions#whitespace#check()
if trailing != 0 || mixed != 0 || long != 0 || !empty(mixed_file)
let b:airline_whitespace_check = s:symbol
if strlen(s:symbol) > 0
let space = (g:airline_symbols.space)
else
let space = ''
endif
if s:show_message
if trailing != 0
let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:trailing_format, trailing)
let b:airline_whitespace_check .= space.printf(s:trailing_format, trailing)
endif
if mixed != 0
let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:mixed_indent_format, mixed)
let b:airline_whitespace_check .= space.printf(s:mixed_indent_format, mixed)
endif
if long != 0
let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:long_format, long)
let b:airline_whitespace_check .= space.printf(s:long_format, long)
endif
if !empty(mixed_file)
let b:airline_whitespace_check .= (g:airline_symbols.space).printf(s:mixed_indent_file_format, mixed_file)
let b:airline_whitespace_check .= space.printf(s:mixed_indent_file_format, mixed_file)
endif
endif
endif
endif
return b:airline_whitespace_check
return airline#util#shorten(b:airline_whitespace_check, 120, 9)
endfunction
function! airline#extensions#whitespace#toggle()
@@ -131,13 +139,29 @@ function! airline#extensions#whitespace#toggle()
echo 'Whitespace checking: '.(s:enabled ? 'Enabled' : 'Disabled')
endfunction
function! airline#extensions#whitespace#disable()
if s:enabled
call airline#extensions#whitespace#toggle()
endif
endfunction
function! airline#extensions#whitespace#init(...)
call airline#parts#define_function('whitespace', 'airline#extensions#whitespace#check')
unlet! b:airline_whitespace_check
augroup airline_whitespace
autocmd!
autocmd CursorHold,BufWritePost * unlet! b:airline_whitespace_check
autocmd CursorHold,BufWritePost * call <sid>ws_refresh()
augroup END
endfunction
function! s:ws_refresh()
if get(b:, 'airline_ws_changedtick', 0) == b:changedtick
return
endif
unlet! b:airline_whitespace_check
if get(g:, 'airline_skip_empty_sections', 0)
exe ':AirlineRefresh'
endif
let b:airline_ws_changedtick = b:changedtick
endfunction

View File

@@ -1,5 +1,7 @@
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists('g:loaded_windowswap')
finish
endif
@@ -15,7 +17,11 @@ function! airline#extensions#windowswap#init(ext)
endfunction
function! airline#extensions#windowswap#get_status()
if WindowSwap#HasMarkedWindow() && WindowSwap#GetMarkedWindowNum() == winnr()
" use new tab-aware api if WS is up to date
let s:mark = exists('*WindowSwap#IsCurrentWindowMarked') ?
\WindowSwap#IsCurrentWindowMarked() :
\(WindowSwap#HasMarkedWindow() && WindowSwap#GetMarkedWindowNum() == winnr())
if s:mark
return g:airline#extensions#windowswap#indicator_text.s:spc
endif
return ''

View File

@@ -1,12 +1,17 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
let s:filetypes = get(g:, 'airline#extensions#wordcount#filetypes', '\vhelp|markdown|rst|org|text')
let s:format = get(g:, 'airline#extensions#wordcount#format', '%d words')
let s:formatter = get(g:, 'airline#extensions#wordcount#formatter', 'default')
scriptencoding utf-8
function! s:update()
if match(&ft, s:filetypes) > -1
let s:formatter = get(g:, 'airline#extensions#wordcount#formatter', 'default')
let g:airline#extensions#wordcount#filetypes = get(g:, 'airline#extensions#wordcount#filetypes',
\ '\vhelp|markdown|rst|org|text|asciidoc|tex|mail')
function! s:wordcount_update()
if empty(bufname(''))
return
endif
if match(&ft, get(g:, 'airline#extensions#wordcount#filetypes')) > -1
let l:mode = mode()
if l:mode ==# 'v' || l:mode ==# 'V' || l:mode ==# 's' || l:mode ==# 'S'
let b:airline_wordcount = airline#extensions#wordcount#formatters#{s:formatter}#format()
@@ -14,23 +19,25 @@ function! s:update()
else
if get(b:, 'airline_wordcount_cache', '') is# '' ||
\ b:airline_wordcount_cache isnot# get(b:, 'airline_wordcount', '') ||
\ get(b:, 'airline_change_tick', 0) != b:changedtick
\ get(b:, 'airline_change_tick', 0) != b:changedtick ||
\ get(b:, 'airline_winwidth', 0) != winwidth(0)
" cache data
let b:airline_wordcount = airline#extensions#wordcount#formatters#{s:formatter}#format()
let b:airline_wordcount_cache = b:airline_wordcount
let b:airline_change_tick = b:changedtick
let b:airline_winwidth = winwidth(0)
endif
endif
endif
endfunction
function! airline#extensions#wordcount#apply(...)
if &ft =~ s:filetypes
if match(&ft, get(g:, 'airline#extensions#wordcount#filetypes')) > -1
call airline#extensions#prepend_to_section('z', '%{get(b:, "airline_wordcount", "")}')
endif
endfunction
function! airline#extensions#wordcount#init(ext)
call a:ext.add_statusline_func('airline#extensions#wordcount#apply')
autocmd BufReadPost,CursorMoved,CursorMovedI * call s:update()
autocmd BufReadPost,CursorMoved,CursorMovedI * call s:wordcount_update()
endfunction

View File

@@ -1,19 +1,25 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
function! airline#extensions#wordcount#formatters#default#format()
let words = string(s:wordcount())
if empty(words)
return
endif
let separator = s:get_decimal_group()
if words > 999 && !empty(separator)
" Format number according to locale, e.g. German: 1.245 or English: 1,245
let a = join(reverse(split(words, '.\zs')),'')
let a = substitute(a, '...', '&'.separator, 'g')
let words = join(reverse(split(a, '.\zs')),'')
let result = g:airline_symbols.space . g:airline_right_alt_sep . g:airline_symbols.space
if winwidth(0) >= 80
let separator = s:get_decimal_group()
if words > 999 && !empty(separator)
" Format number according to locale, e.g. German: 1.245 or English: 1,245
let words = substitute(words, '\d\@<=\(\(\d\{3\}\)\+\)$', separator.'&', 'g')
endif
let result = printf("%s%s", words, " words"). result
else
let result = printf("%s%s", words, "W"). result
endif
return words . " words" . g:airline_symbols.space . g:airline_right_alt_sep . g:airline_symbols.space
return result
endfunction
function! s:wordcount()
@@ -48,7 +54,7 @@ function! s:wordcount()
endif
endfunction
function s:get_decimal_group()
function! s:get_decimal_group()
if match(v:lang, '\v\cC|en') > -1
return ','
elseif match(v:lang, '\v\cde|dk|fr|pt') > -1

View File

@@ -0,0 +1,25 @@
" MIT License. Copyright (c) 2017 YoungHoon Rhiu.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if !exists('g:XkbSwitchLib')
finish
endif
function! airline#extensions#xkblayout#status()
let keyboard_layout = libcall(g:XkbSwitchLib, 'Xkb_Switch_getXkbLayout', '')
let keyboard_layout = split(keyboard_layout, '\.')[-1]
let short_codes = {'2SetKorean': 'KR', 'Chinese': 'CN', 'Japanese': 'JP'}
if has_key(short_codes, keyboard_layout)
let keyboard_layout = short_codes[keyboard_layout]
endif
return keyboard_layout
endfunction
function! airline#extensions#xkblayout#init(ext)
call airline#parts#define_function('xkblayout', 'airline#extensions#xkblayout#status')
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2015 Evgeny Firsov.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:spc = g:airline_symbols.space
let s:error_symbol = get(g:, 'airline#extensions#ycm#error_symbol', 'E:')
let s:warning_symbol = get(g:, 'airline#extensions#ycm#warning_symbol', 'W:')
@@ -11,7 +13,7 @@ function! airline#extensions#ycm#init(ext)
endfunction
function! airline#extensions#ycm#get_error_count()
if exists(':YcmDiag')
if exists(':YcmDiag') && exists("*youcompleteme#GetErrorCount")
let cnt = youcompleteme#GetErrorCount()
if cnt != 0
@@ -23,7 +25,7 @@ function! airline#extensions#ycm#get_error_count()
endfunction
function! airline#extensions#ycm#get_warning_count()
if exists(':YcmDiag')
if exists(':YcmDiag') && exists("*youcompleteme#GetWarningCount")
let cnt = youcompleteme#GetWarningCount()
if cnt != 0

View File

@@ -1,7 +1,12 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
let s:is_win32term = (has('win32') || has('win64')) && !has('gui_running') && (empty($CONEMUBUILD) || &term !=? 'xterm')
scriptencoding utf-8
let s:is_win32term = (has('win32') || has('win64')) &&
\ !has('gui_running') &&
\ (empty($CONEMUBUILD) || &term !=? 'xterm') &&
\ !(exists("+termguicolors") && &termguicolors)
let s:separators = {}
let s:accents = {}
@@ -20,22 +25,25 @@ function! s:get_syn(group, what)
if !exists("g:airline_gui_mode")
let g:airline_gui_mode = airline#init#gui_mode()
endif
let color = synIDattr(synIDtrans(hlID(a:group)), a:what, g:airline_gui_mode)
if empty(color) || color == -1
let color = synIDattr(synIDtrans(hlID('Normal')), a:what, g:airline_gui_mode)
let color = ''
if hlexists(a:group)
let color = synIDattr(synIDtrans(hlID(a:group)), a:what, g:airline_gui_mode)
endif
if empty(color) || color == -1
let color = 'NONE'
" should always exists
let color = synIDattr(synIDtrans(hlID('Normal')), a:what, g:airline_gui_mode)
" however, just in case
if empty(color) || color == -1
let color = 'NONE'
endif
endif
return color
endfunction
function! s:get_array(fg, bg, opts)
let fg = a:fg
let bg = a:bg
return g:airline_gui_mode ==# 'gui'
\ ? [ fg, bg, '', '', join(a:opts, ',') ]
\ : [ '', '', fg, bg, join(a:opts, ',') ]
\ ? [ a:fg, a:bg, '', '', join(a:opts, ',') ]
\ : [ '', '', a:fg, a:bg, join(a:opts, ',') ]
endfunction
function! airline#highlighter#get_highlight(group, ...)
@@ -54,6 +62,15 @@ function! airline#highlighter#get_highlight2(fg, bg, ...)
return s:get_array(fg, bg, a:000)
endfunction
function! s:hl_group_exists(group)
if !hlexists(a:group)
return 0
elseif empty(synIDattr(hlID(a:group), 'fg'))
return 0
endif
return 1
endfunction
function! airline#highlighter#exec(group, colors)
if pumvisible()
return
@@ -63,20 +80,53 @@ function! airline#highlighter#exec(group, colors)
let colors[2] = s:gui2cui(get(colors, 0, ''), get(colors, 2, ''))
let colors[3] = s:gui2cui(get(colors, 1, ''), get(colors, 3, ''))
endif
let cmd= printf('hi %s %s %s %s %s %s %s %s',
\ a:group, s:Get(colors, 0, 'guifg=', ''), s:Get(colors, 1, 'guibg=', ''),
\ s:Get(colors, 2, 'ctermfg=', ''), s:Get(colors, 3, 'ctermbg=', ''),
\ s:Get(colors, 4, 'gui=', ''), s:Get(colors, 4, 'cterm=', ''),
\ s:Get(colors, 4, 'term=', ''))
let old_hi = airline#highlighter#get_highlight(a:group)
if len(colors) == 4
call add(colors, '')
endif
if old_hi != colors
let colors = s:CheckDefined(colors)
if old_hi != colors || !s:hl_group_exists(a:group)
let cmd = printf('hi %s %s %s %s %s %s %s %s',
\ a:group, s:Get(colors, 0, 'guifg=', ''), s:Get(colors, 1, 'guibg=', ''),
\ s:Get(colors, 2, 'ctermfg=', ''), s:Get(colors, 3, 'ctermbg=', ''),
\ s:Get(colors, 4, 'gui=', ''), s:Get(colors, 4, 'cterm=', ''),
\ s:Get(colors, 4, 'term=', ''))
exe cmd
endif
endfunction
function! s:CheckDefined(colors)
" Checks, whether the definition of the colors is valid and is not empty or NONE
" e.g. if the colors would expand to this:
" hi airline_c ctermfg=NONE ctermbg=NONE
" that means to clear that highlighting group, therefore, fallback to Normal
" highlighting group for the cterm values
" This only works, if the Normal highlighting group is actually defined, so
" return early, if it has been cleared
if !exists("g:airline#highlighter#normal_fg_hi")
let g:airline#highlighter#normal_fg_hi = synIDattr(synIDtrans(hlID('Normal')), 'fg', 'cterm')
endif
if empty(g:airline#highlighter#normal_fg_hi) || g:airline#highlighter#normal_fg_hi < 0
return a:colors
endif
for val in a:colors
if !empty(val) && val !=# 'NONE'
return a:colors
endif
endfor
" this adds the bold attribute to the term argument of the :hi command,
" but at least this makes sure, the group will be defined
let fg = g:airline#highlighter#normal_fg_hi
let bg = synIDattr(synIDtrans(hlID('Normal')), 'bg', 'cterm')
if bg < 0
" in case there is no background color defined for Normal
let bg = a:colors[3]
endif
return a:colors[0:1] + [fg, bg] + [a:colors[4]]
endfunction
function! s:Get(dict, key, prefix, default)
if get(a:dict, a:key, a:default) isnot# a:default
return a:prefix. get(a:dict, a:key)
@@ -109,7 +159,11 @@ function! airline#highlighter#load_theme()
call airline#highlighter#highlight_modified_inactive(winbufnr(winnr))
endfor
call airline#highlighter#highlight(['inactive'])
call airline#highlighter#highlight(['normal'])
if getbufvar( bufnr('%'), '&modified' )
call airline#highlighter#highlight(['normal', 'modified'])
else
call airline#highlighter#highlight(['normal'])
endif
endfunction
function! airline#highlighter#add_separator(from, to, inverse)
@@ -135,7 +189,8 @@ function! airline#highlighter#highlight_modified_inactive(bufnr)
endif
endfunction
function! airline#highlighter#highlight(modes)
function! airline#highlighter#highlight(modes, ...)
let bufnr = a:0 ? a:1 : ''
let p = g:airline#themes#{g:airline_theme}#palette
" draw the base mode, followed by any overrides
@@ -146,7 +201,11 @@ function! airline#highlighter#highlight(modes)
let dict = g:airline#themes#{g:airline_theme}#palette[mode]
for kvp in items(dict)
let mode_colors = kvp[1]
call airline#highlighter#exec(kvp[0].suffix, mode_colors)
let name = kvp[0]
if name is# 'airline_c' && !empty(bufnr) && suffix is# '_inactive'
let name = 'airline_c'.bufnr
endif
call airline#highlighter#exec(name.suffix, mode_colors)
for accent in keys(s:accents)
if !has_key(p.accents, accent)
@@ -164,7 +223,7 @@ function! airline#highlighter#highlight(modes)
else
call add(colors, get(p.accents[accent], 4, ''))
endif
call airline#highlighter#exec(kvp[0].suffix.'_'.accent, colors)
call airline#highlighter#exec(name.suffix.'_'.accent, colors)
endfor
endfor

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
function! s:check_defined(variable, default)
if !exists(a:variable)
let {a:variable} = a:default
@@ -15,13 +17,14 @@ function! airline#init#bootstrap()
let s:loaded = 1
let g:airline#init#bootstrapping = 1
call s:check_defined('g:airline_left_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b0":">")
call s:check_defined('g:airline_left_alt_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b1":">")
call s:check_defined('g:airline_right_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b2":"<")
call s:check_defined('g:airline_right_alt_sep', get(g:, 'airline_powerline_fonts', 0)?"\ue0b3":"<")
let g:airline#util#async = v:version >= 800 && has('job')
let g:airline#util#is_windows = has('win32') || has('win64')
call s:check_defined('g:airline_detect_modified', 1)
call s:check_defined('g:airline_detect_paste', 1)
call s:check_defined('g:airline_detect_crypt', 1)
call s:check_defined('g:airline_detect_spell', 1)
call s:check_defined('g:airline_detect_iminsert', 0)
call s:check_defined('g:airline_inactive_collapse', 1)
call s:check_defined('g:airline_exclude_filenames', ['DebuggerWatch','DebuggerStack','DebuggerStatus'])
@@ -53,20 +56,69 @@ function! airline#init#bootstrap()
\ 'wombat': 'wombat',
\ 'zenburn': 'zenburn',
\ 'solarized': 'solarized',
\ 'flattened': 'solarized',
\ '\CNeoSolarized': 'solarized',
\ }, 'keep')
call s:check_defined('g:airline_symbols', {})
" First define the symbols,
" that are common in Powerline/Unicode/ASCII mode,
" then add specific symbols for either mode
call extend(g:airline_symbols, {
\ 'paste': 'PASTE',
\ 'readonly': get(g:, 'airline_powerline_fonts', 0) ? "\ue0a2" : 'RO',
\ 'whitespace': get(g:, 'airline_powerline_fonts', 0) ? "\u2739" : '!',
\ 'linenr': get(g:, 'airline_powerline_fonts', 0) ? "\ue0a1" : ':',
\ 'branch': get(g:, 'airline_powerline_fonts', 0) ? "\ue0a0" : '',
\ 'notexists': "\u2204",
\ 'modified': '+',
\ 'space': ' ',
\ 'crypt': get(g:, 'airline_crypt_symbol', nr2char(0x1F512)),
\ }, 'keep')
\ 'paste': 'PASTE',
\ 'spell': 'SPELL',
\ 'modified': '+',
\ 'space': ' '
\ }, 'keep')
if get(g:, 'airline_powerline_fonts', 0)
" Symbols for Powerline terminals
call s:check_defined('g:airline_left_sep', "\ue0b0") " 
call s:check_defined('g:airline_left_alt_sep', "\ue0b1") " 
call s:check_defined('g:airline_right_sep', "\ue0b2") " 
call s:check_defined('g:airline_right_alt_sep', "\ue0b3") " 
" ro=, ws=☲, lnr=☰, mlnr=, br=, nx=Ɇ, crypt=🔒
call extend(g:airline_symbols, {
\ 'readonly': "\ue0a2",
\ 'whitespace': "\u2632",
\ 'linenr': "\u2630 ",
\ 'maxlinenr': " \ue0a1",
\ 'branch': "\ue0a0",
\ 'notexists': "\u0246",
\ 'crypt': nr2char(0x1F512),
\ }, 'keep')
elseif &encoding==?'utf-8' && !get(g:, "airline_symbols_ascii", 0)
" Symbols for Unicode terminals
call s:check_defined('g:airline_left_sep', "")
call s:check_defined('g:airline_left_alt_sep', "")
call s:check_defined('g:airline_right_sep', "")
call s:check_defined('g:airline_right_alt_sep', "")
" ro=⊝, ws=☲, lnr=☰, mlnr=㏑, br=ᚠ, nx=Ɇ, crypt=🔒
call extend(g:airline_symbols, {
\ 'readonly': "\u229D",
\ 'whitespace': "\u2632",
\ 'linenr': "\u2630 ",
\ 'maxlinenr': " \u33D1",
\ 'branch': "\u16A0",
\ 'notexists': "\u0246",
\ 'crypt': nr2char(0x1F512),
\ }, 'keep')
else
" Symbols for ASCII terminals
call s:check_defined('g:airline_left_sep', "")
call s:check_defined('g:airline_left_alt_sep', "")
call s:check_defined('g:airline_right_sep', "")
call s:check_defined('g:airline_right_alt_sep', "")
call extend(g:airline_symbols, {
\ 'readonly': 'RO',
\ 'whitespace': '!',
\ 'linenr': 'ln ',
\ 'maxlinenr': ' :',
\ 'branch': '',
\ 'notexists': '?',
\ 'crypt': 'cr',
\ }, 'keep')
endif
call airline#parts#define('mode', {
\ 'function': 'airline#parts#mode',
@@ -75,6 +127,7 @@ function! airline#init#bootstrap()
call airline#parts#define_function('iminsert', 'airline#parts#iminsert')
call airline#parts#define_function('paste', 'airline#parts#paste')
call airline#parts#define_function('crypt', 'airline#parts#crypt')
call airline#parts#define_function('spell', 'airline#parts#spell')
call airline#parts#define_function('filetype', 'airline#parts#filetype')
call airline#parts#define('readonly', {
\ 'function': 'airline#parts#readonly',
@@ -83,26 +136,32 @@ function! airline#init#bootstrap()
call airline#parts#define_raw('file', '%f%m')
call airline#parts#define_raw('path', '%F%m')
call airline#parts#define('linenr', {
\ 'raw': '%{g:airline_symbols.linenr}%#__accent_bold#%4l%#__restore__#',
\ 'raw': '%{g:airline_symbols.linenr}%4l',
\ 'accent': 'bold'})
call airline#parts#define('maxlinenr', {
\ 'raw': '/%L%{g:airline_symbols.maxlinenr}',
\ 'accent': 'bold'})
call airline#parts#define_function('ffenc', 'airline#parts#ffenc')
call airline#parts#define_empty(['hunks', 'branch', 'tagbar', 'syntastic',
\ 'eclim', 'whitespace','windowswap', 'ycm_error_count', 'ycm_warning_count'])
call airline#parts#define_empty(['hunks', 'branch', 'obsession', 'tagbar',
\ 'syntastic-warn', 'syntastic-err', 'eclim', 'whitespace','windowswap',
\ 'ycm_error_count', 'ycm_warning_count', 'neomake_error_count',
\ 'neomake_warning_count', 'ale_error_count', 'ale_warning_count'])
call airline#parts#define_text('capslock', '')
call airline#parts#define_text('xkblayout', '')
unlet g:airline#init#bootstrapping
endfunction
function! airline#init#gui_mode()
return ((has('nvim') && exists('$NVIM_TUI_ENABLE_TRUE_COLOR'))
\ || has('gui_running') || (has("termtruecolor") && &guicolors == 1)) ?
return ((has('nvim') && exists('$NVIM_TUI_ENABLE_TRUE_COLOR') && !exists("+termguicolors"))
\ || has('gui_running') || (has("termtruecolor") && &guicolors == 1) || (has("termguicolors") && &termguicolors == 1)) ?
\ 'gui' : 'cterm'
endfunction
function! airline#init#sections()
let spc = g:airline_symbols.space
if !exists('g:airline_section_a')
let g:airline_section_a = airline#section#create_left(['mode', 'crypt', 'paste', 'capslock', 'iminsert'])
let g:airline_section_a = airline#section#create_left(['mode', 'crypt', 'paste', 'spell', 'capslock', 'xkblayout', 'iminsert'])
endif
if !exists('g:airline_section_b')
let g:airline_section_b = airline#section#create(['hunks', 'branch'])
@@ -124,13 +183,16 @@ function! airline#init#sections()
let g:airline_section_y = airline#section#create_right(['ffenc'])
endif
if !exists('g:airline_section_z')
let g:airline_section_z = airline#section#create(['windowswap', '%3p%%'.spc, 'linenr', ':%3v '])
if winwidth(0) > 80
let g:airline_section_z = airline#section#create(['windowswap', 'obsession', '%3p%%'.spc, 'linenr', 'maxlinenr', spc.':%3v'])
else
let g:airline_section_z = airline#section#create(['%3p%%'.spc, 'linenr', ':%3v'])
endif
endif
if !exists('g:airline_section_error')
let g:airline_section_error = airline#section#create(['ycm_error_count', 'syntastic', 'eclim'])
let g:airline_section_error = airline#section#create(['ycm_error_count', 'syntastic-err', 'eclim', 'neomake_error_count', 'ale_error_count'])
endif
if !exists('g:airline_section_warning')
let g:airline_section_warning = airline#section#create(['ycm_warning_count', 'whitespace'])
let g:airline_section_warning = airline#section#create(['ycm_warning_count', 'syntastic-warn', 'neomake_warning_count', 'ale_warning_count', 'whitespace'])
endif
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
" basic 16 msdos from MSDOS
" see output of color, should be
" 0 Black
@@ -21,7 +23,7 @@
" 15 White
let s:basic16 = [
\ [ 0x00, 0x00, 0x00 ],
\ [ 0x00, 0x00, 0x00 ],
\ [ 0x00, 0x00, 0x80 ],
\ [ 0x00, 0x80, 0x00 ],
\ [ 0x00, 0x80, 0x80 ],

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
let s:parts = {}
" PUBLIC API {{{
@@ -51,7 +53,7 @@ endfunction
" }}}
function! airline#parts#mode()
return get(w:, 'airline_current_mode', '')
return airline#util#shorten(get(w:, 'airline_current_mode', ''), 79, 1)
endfunction
function! airline#parts#crypt()
@@ -62,6 +64,10 @@ function! airline#parts#paste()
return g:airline_detect_paste && &paste ? g:airline_symbols.paste : ''
endfunction
function! airline#parts#spell()
return g:airline_detect_spell && &spell ? g:airline_symbols.spell : ''
endfunction
function! airline#parts#iminsert()
if g:airline_detect_iminsert && &iminsert && exists('b:keymap_name')
return toupper(b:keymap_name)
@@ -78,10 +84,16 @@ function! airline#parts#readonly()
endfunction
function! airline#parts#filetype()
return &filetype
return winwidth(0) < 90 && strlen(&filetype) > 3 ? matchstr(&filetype, '...'). (&encoding is? 'utf-8' ? '…' : '>') : &filetype
endfunction
function! airline#parts#ffenc()
return printf('%s%s%s', &fenc, &l:bomb ? '[BOM]' : '', strlen(&ff) > 0 ? '['.&ff.']' : '')
let expected = get(g:, 'airline#parts#ffenc#skip_expected_string', '')
let bomb = &l:bomb ? '[BOM]' : ''
let ff = strlen(&ff) ? '['.&ff.']' : ''
if expected is# &fenc.bomb.ff
return ''
else
return &fenc.bomb.ff
endif
endfunction

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
call airline#init#bootstrap()
let s:spc = g:airline_symbols.space
@@ -17,6 +19,7 @@ function! s:create(parts, append)
for idx in range(len(a:parts))
let part = airline#parts#get(a:parts[idx])
let val = ''
let add_sep = get(l:, 'add_sep', 0)
if exists('part.function')
let func = (part.function).'()'
@@ -27,7 +30,11 @@ function! s:create(parts, append)
let val .= s:spc.g:airline_left_alt_sep.s:spc
endif
if a:append < 0 && idx != 0
let val = s:spc.g:airline_right_alt_sep.s:spc.val
let t = ''
if !add_sep
let t = s:spc.g:airline_right_alt_sep.s:spc
endif
let val = t.val
endif
if exists('part.raw')
let _ .= s:wrap_accent(part, val.(part.raw))
@@ -42,10 +49,15 @@ function! s:create(parts, append)
if a:append > 0 && idx != 0
let partval = printf('%%{airline#util#append(%s,%s)}', func, minwidth)
" will add an extra separator, if minwidth is zero
let add_sep = (minwidth == 0)
elseif a:append < 0 && idx != len(a:parts) - 1
let partval = printf('%%{airline#util#prepend(%s,%s)}', func, minwidth)
" will add an extra separator, if minwidth is zero
let add_sep = (minwidth == 0)
else
let partval = printf('%%{airline#util#wrap(%s,%s)}', func, minwidth)
let add_sep = 0
endif
if exists('part.condition')

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
" generates a dictionary which defines the colors for each highlight group
function! airline#themes#generate_color_map(sect1, sect2, sect3, ...)
let palette = {
@@ -45,6 +47,7 @@ function! airline#themes#patch(palette)
endfor
let a:palette.accents = get(a:palette, 'accents', {})
let a:palette.accents.none = [ '', '', '', '', '' ]
let a:palette.accents.bold = [ '', '', '', '', 'bold' ]
let a:palette.accents.italic = [ '', '', '', '', 'italic' ]

View File

@@ -1,3 +1,5 @@
scriptencoding utf-8
" Each theme is contained in its own file and declares variables scoped to the
" file. These variables represent the possible "modes" that airline can
" detect. The mode is the return value of mode(), which gets converted to a
@@ -92,11 +94,10 @@ let g:airline#themes#dark#palette.accents = {
" variable so that related functionality is loaded iff the user is using
" ctrlp. Note that this is optional, and if you do not define ctrlp colors
" they will be chosen automatically from the existing palette.
if !get(g:, 'loaded_ctrlp', 0)
finish
if get(g:, 'loaded_ctrlp', 0)
let g:airline#themes#dark#palette.ctrlp = airline#extensions#ctrlp#generate_color_map(
\ [ '#d7d7ff' , '#5f00af' , 189 , 55 , '' ],
\ [ '#ffffff' , '#875fd7' , 231 , 98 , '' ],
\ [ '#5f00af' , '#ffffff' , 55 , 231 , 'bold' ])
endif
let g:airline#themes#dark#palette.ctrlp = airline#extensions#ctrlp#generate_color_map(
\ [ '#d7d7ff' , '#5f00af' , 189 , 55 , '' ],
\ [ '#ffffff' , '#875fd7' , 231 , 98 , '' ],
\ [ '#5f00af' , '#ffffff' , 55 , 231 , 'bold' ])

View File

@@ -1,9 +1,25 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
call airline#init#bootstrap()
let s:spc = g:airline_symbols.space
function! airline#util#shorten(text, winwidth, minwidth, ...)
if winwidth(0) < a:winwidth && len(split(a:text, '\zs')) > a:minwidth
if get(a:000, 0, 0)
" shorten from tail
return '…'.matchstr(a:text, '.\{'.a:minwidth.'}$')
else
" shorten from beginning of string
return matchstr(a:text, '^.\{'.a:minwidth.'}').'…'
endif
else
return a:text
endif
endfunction
function! airline#util#wrap(text, minwidth)
if a:minwidth > 0 && winwidth(0) < a:minwidth
return ''
@@ -19,6 +35,12 @@ function! airline#util#append(text, minwidth)
return empty(a:text) ? '' : prefix.g:airline_left_alt_sep.s:spc.a:text
endfunction
function! airline#util#warning(msg)
echohl WarningMsg
echomsg "airline: ".a:msg
echohl Normal
endfunction
function! airline#util#prepend(text, minwidth)
if a:minwidth > 0 && winwidth(0) < a:minwidth
return ''
@@ -62,3 +84,30 @@ else
endfunction
endif
" Define a wrapper over system() that uses nvim's async job control if
" available. This way we avoid overwriting v:shell_error, which might
" potentially disrupt other plugins.
if has('nvim')
function! s:system_job_handler(job_id, data, event) dict
if a:event == 'stdout'
let self.buf .= join(a:data)
endif
endfunction
function! airline#util#system(cmd)
let l:config = {
\ 'buf': '',
\ 'on_stdout': function('s:system_job_handler'),
\ }
let l:id = jobstart(a:cmd, l:config)
if l:id < 1
return system(a:cmd)
endif
call jobwait([l:id])
return l:config.buf
endfunction
else
function! airline#util#system(cmd)
return system(a:cmd)
endfunction
endif

View File

@@ -1,5 +1,5 @@
*airline.txt* Lean and mean status/tabline that's light as air
*airline*
*airline* *vim-airline*
_ _ _ _ ~
__ _(_)_ __ ___ __ _(_)_ __| (_)_ __ ___ ~
\ \ / / | '_ ` _ \ _____ / _` | | '__| | | '_ \ / _ \ ~
@@ -32,6 +32,62 @@ INTRODUCTION *airline-intro*
vim-airline is a fast and lightweight alternative to powerline, written
in 100% vimscript with no outside dependencies.
When the plugin is correctly loaded, and Vim is configured for drawing a
'statusline' (set 'laststatus' to 2, to always display the airline
statusline) Vim will draw a nice statusline at the bottom of each window.
That line consists of several sections, each one displaying some piece of
information. By default (without configuration) this line will look like this: >
+-----------------------------------------------------------------------------+
|~ |
|~ |
|~ VIM - Vi IMproved |
|~ |
|~ version 8.0 |
|~ by Bram Moolenaar et al. |
|~ Vim is open source and freely distributable |
|~ |
|~ type :h :q<Enter> to exit |
|~ type :help<Enter> or <F1> for on-line help |
|~ type :help version8<Enter> for version info |
|~ |
|~ |
+-----------------------------------------------------------------------------+
| A | B | C X | Y | Z | [...] |
+-----------------------------------------------------------------------------+
The statusline is the colored line at the bottom, which contains the sections
(possibly in different colors):
section meaning (example)~
--------------------------
A displays the mode + additional flags like crypt/spell/paste (INSERT)
B VCS information (branch, hunk summary) (master)
C filename + read-only flag (~/.vim/vimrc RO)
X filetype (vim)
Y file encoding[fileformat] (utf-8[unix])
Z current position in the file
percentage % ☰ current line/number of lines ln : column
So this: 10% ☰ 10/100 ln : 20 means: >
10% - 10 percent
☰ 10 - current line 10
/100 ln - of 100 lines
: 20 - current column 20
<
[...] additional sections (warning/errors/statistics)
from external plugins (e.g. YCM/syntastic/...)
For a better look, those sections can be colored differently, depending on the mode and
whether the current file is 'modified'
Additionally, several extensions exists, that can provide additional feature (e.g. the
tabline extension provides an extra statusline on the top of the Vim window and can
display loaded buffers and tabs in the current Vim session).
Most of this is customizable and the default sections can be configured using the vim
variables g:airline_section_<name> (see |airline-default-sections|)
==============================================================================
FEATURES *airline-features*
@@ -72,6 +128,9 @@ values):
<
* enable crypt detection >
let g:airline_detect_crypt=1
* enable spell detection >
let g:airline_detect_spell=1
<
* enable iminsert detection >
let g:airline_detect_iminsert=0
@@ -99,9 +158,12 @@ values):
endif
endfunction
<
* enable/disable automatic population of the `g:airline_symbols` dictionary
with powerline symbols. >
let g:airline_powerline_fonts=0
* By default, airline will use unicode symbols if your encoding matches
utf-8. If you want the powerline symbols set this variable: >
let g:airline_powerline_fonts = 1
<
If you want to use plain ascii symbols, set this variable: >
let g:airline_symbols_ascii = 1
<
* define the set of text to display for each mode. >
let g:airline_mode_map = {} " see source for the defaults
@@ -137,8 +199,14 @@ values):
* disable the Airline customization for selective windows (this is a
window-local variable so you can disable it for only some windows) >
let w:airline_disabled = 1
<
* Do not draw separators for empty sections (only for the active window) >
let g:airline_skip_empty_sections = 1
<
This variable can be overriden by setting a window-local variable with
the same name (in the correct window): >
let w:airline_skip_empty_sections = 0
<
==============================================================================
COMMANDS *airline-commands*
@@ -161,6 +229,7 @@ Airline comes with some user-defined autocommands.
|AirlineAfterInit| after plugin is initialized, but before the statusline
is replaced
|AirlineAfterTheme| after theme of the statusline has been changed
|AirlineToggledOn| after airline is activated and replaced the statusline
|AirlineToggledOff| after airline is deactivated and the statusline is
restored to the original
@@ -187,10 +256,13 @@ its contents. >
let g:airline_symbols.linenr = '␊'
let g:airline_symbols.linenr = '␤'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.maxlinenr = '☰'
let g:airline_symbols.maxlinenr = ''
let g:airline_symbols.branch = '⎇'
let g:airline_symbols.paste = 'ρ'
let g:airline_symbols.paste = 'Þ'
let g:airline_symbols.paste = '∥'
let g:airline_symbols.spell = 'Ꞩ'
let g:airline_symbols.notexists = '∄'
let g:airline_symbols.whitespace = 'Ξ'
@@ -220,22 +292,24 @@ Note: If you define any section variables it will replace the default values
entirely. If you want to disable only certain parts of a section you can try
using variables defined in the |airline-configuration| or |airline-extensions|
section.
|airline-default-sections|
>
variable names default contents
----------------------------------------------------------------------------
let g:airline_section_a (mode, crypt, paste, iminsert)
let g:airline_section_a (mode, crypt, paste, spell, iminsert)
let g:airline_section_b (hunks, branch)
let g:airline_section_c (bufferline or filename)
let g:airline_section_gutter (readonly, csv)
let g:airline_section_x (tagbar, filetype, virtualenv)
let g:airline_section_y (fileencoding, fileformat)
let g:airline_section_z (percentage, line number, column number)
let g:airline_section_error (ycm_error_count, syntastic, eclim)
let g:airline_section_warning (ycm_warning_count, whitespace)
let g:airline_section_error (ycm_error_count, syntastic-err, eclim)
let g:airline_section_warning (ycm_warning_count, syntastic-warn, whitespace)
" here is an example of how you could replace the branch indicator with
" the current working directory, followed by the filename.
let g:airline_section_b = '%{getcwd()}'
" the current working directory (limited to 10 characters),
" followed by the filename.
let g:airline_section_b = '%-0.10{getcwd()}'
let g:airline_section_c = '%t'
<
==============================================================================
@@ -290,6 +364,12 @@ configuration values that you can use.
Try setting this to zero, if you notice bleeding color artifacts >
let airline#extensions#default#section_use_groupitems = 1
<
* configure the fileformat output
By default, it will display something like 'utf-8[unix]', however, you can
skip displaying it, if the output matches a configured string. To do so,
set >
let g:airline#parts#ffenc#skip_expected_string='utf-8[unix]'
<
------------------------------------- *airline-quickfix*
The quickfix extension is a simple built-in extension which determines
whether the buffer is a quickfix or location list buffer, and adjusts the
@@ -312,10 +392,17 @@ vim-bufferline <https://github.com/bling/vim-bufferline>
let g:airline#extensions#bufferline#overwrite_variables = 1
<
------------------------------------- *airline-branch*
vim-airline will display the branch-indicator together with the branch name in
the statusline, if one of the following plugins is installed:
fugitive.vim <https://github.com/tpope/vim-fugitive>
lawrencium <https://bitbucket.org/ludovicchabant/vim-lawrencium>
vcscommand <http://www.vim.org/scripts/script.php?script_id=90>
If a file is edited, that is not yet in the repository, the
notexists symbol will be displayed after the branch name.
* enable/disable fugitive/lawrencium integration >
let g:airline#extensions#branch#enabled = 1
<
@@ -351,10 +438,20 @@ vcscommand <http://www.vim.org/scripts/script.php?script_id=90>
endfunction
<
------------------------------------- *airline-syntastic*
syntastic <https://github.com/scrooloose/syntastic>
syntastic <https://github.com/vim-syntastic/syntastic>
* enable/disable syntastic integration >
let g:airline#extensions#syntastic#enabled = 1
Note: The recommendation from syntastic to modify the statusline directly
does not apply, if you use vim-airline, since it will take care for you of
adjusting the statusline.
* syntastic error_symbol >
let airline#extensions#syntastic#error_symbol = 'E:'
<
* syntastic warning >
let airline#extensions#syntastic#warning_symbol = 'W:'
<
------------------------------------- *airline-tagbar*
tagbar <https://github.com/majutsushi/tagbar>
@@ -393,6 +490,12 @@ quickfixsigns <https://github.com/tomtom/quickfixsigns_vim>
* set hunk count symbols. >
let g:airline#extensions#hunks#hunk_symbols = ['+', '~', '-']
<
------------------------------------- *airline-vimagit*
vimagit <https://github.com/jreybert/vimagit>
* enable/disable vimagit integration >
let g:airline#extensions#vimagit#enabled = 1
<
------------------------------------- *airline-ctrlp*
ctrlp <https://github.com/kien/ctrlp.vim>
@@ -429,7 +532,7 @@ eclim <https://eclim.org>
" the default value matches filetypes typically used for documentation
" such as markdown and help files.
let g:airline#extensions#wordcount#filetypes = ...
(default: markdown,rst,org,help,text)
(default: markdown,rst,org,help,text,tex,mail)
* defines the name of a formatter for word count will be displayed: >
" The default will try to guess LC_NUMERIC and format number accordingly
@@ -445,11 +548,18 @@ eclim <https://eclim.org>
\ wordcount()['words'] > 100 ? 'okay' : 'not enough')
endfunction
let g:airline#extensions#wordline#formatter = 'foo'
* defines how to display the wordcount statistics: >
let g:airline#extensions#wordcount#format = '%d words'
<
------------------------------------- *airline-whitespace*
* enable/disable detection of whitespace errors. >
let g:airline#extensions#whitespace#enabled = 1
<
* disable detection of whitespace errors. >
" useful to call for particular file types (e.g., in "ftplugin/*")
silent! call airline#extensions#whitespace#disable()
<
* customize the type of mixed indent checking to perform. >
" must be all spaces or all tabs before the first non-whitespace character
let g:airline#extensions#whitespace#mixed_indent_algo = 0 (default)
@@ -472,6 +582,9 @@ eclim <https://eclim.org>
" trailing: trailing whitespace
" mixed-indent-file: different indentation in different lines
let g:airline#extensions#whitespace#checks = [ 'indent', 'trailing', 'long', 'mixed-indent-file' ]
" this can also be configured for an individual buffer
let b:airline_whitespace_checks = [ 'indent', 'trailing', 'long', 'mixed-indent-file' ]
<
* configure the maximum number of lines where whitespace checking is enabled. >
let g:airline#extensions#whitespace#max_lines = 20000
@@ -487,6 +600,19 @@ eclim <https://eclim.org>
* configure custom trailing whitespace regexp rule >
let g:airline#extensions#whitespace#trailing_regexp = '\s$'
* configure, which filetypes have special treatment of /* */ comments,
matters for mix-indent-file algorithm: >
let airline#extensions#c_like_langs = ['c', 'cpp', 'cuda', 'go', 'javascript', 'ld', 'php']
<
* disable whitespace checking for an individual buffer >
" Checking is enabled by default because b:airline_whitespace_disabled
" is by default not defined:
unlet b:airline_whitespace_disabled
" If b:airline_whitespace_disabled is defined and is non-zero for a buffer,
" then whitespace checking will be disabled for that buffer; for example:
" let b:airline_whitespace_disabled = 1
<
------------------------------------- *airline-tabline*
Note: If you're using the ctrlspace tabline only the option marked with (c)
@@ -499,11 +625,17 @@ are supported!
let g:airline#extensions#tabline#show_splits = 1
*
* switch position of buffers and tabs on splited tabline (c)
(only supported for ctrlspace plugin). >
let g:airline#extensions#tabline#switch_buffers_and_tabs = 0
<
* enable/disable displaying buffers with a single tab. (c)
let g:airline#extensions#tabline#show_buffers = 1
<
Note: If you are using neovim (has('tablineat') = 1), then you can click
on the tabline with the left mouse button to switch to that buffer, and
with the middle mouse button to delete that buffer.
* enable/disable displaying tabs, regardless of number. (c)
let g:airline#extensions#tabline#show_tabs = 1
<
@@ -524,6 +656,9 @@ are supported!
* enable/disable displaying tab type (far right) >
let g:airline#extensions#tabline#show_tab_type = 1
Note: The tab-type will only be displayed in tab-mode,
if there are no splits shown. (See: g:airline#extensions#tabline#show_splits)
* rename label for buffers (default: 'buffers') (c)
let g:airline#extensions#tabline#buffers_label = 'b'
@@ -556,12 +691,27 @@ are supported!
Use |gt| for switching tabs.
In tabmode, those mappings will switch to the specified tab.
* change the display format of the buffer index >
let g:airline#extensions#tabline#buffer_idx_format = {
\ '0': '0 ',
\ '1': '1 ',
\ '2': '2 ',
\ '3': '3 ',
\ '4': '4 ',
\ '5': '5 ',
\ '6': '6 ',
\ '7': '7 ',
\ '8': '8 ',
\ '9': '9 '
\}
<
* defines the name of a formatter for how buffer names are displayed. (c)
let g:airline#extensions#tabline#formatter = 'default'
" here is how you can define a 'foo' formatter:
" create a file in the dir autoload/airline/extensions/tabline/formatters/
" called foo.vim
" called foo.vim >
function! airline#extensions#tabline#formatters#foo#format(bufnr, buffers)
return fnamemodify(bufname(a:bufnr), ':t')
endfunction
@@ -632,6 +782,10 @@ Note: Enabling this extension will modify 'showtabline' and 'guioptions'.
won't update airline on |:badd| commands) >
let airline#extensions#tabline#disable_refresh = 0
* preserve windows when closing a buffer from the bufferline (default: 0) >
let airline#extensions#tabline#middle_click_preserves_windows = 1
<
------------------------------------- *airline-tmuxline*
tmuxline <https://github.com/edkolev/tmuxline.vim>
@@ -681,6 +835,18 @@ vim-capslock <https://github.com/tpope/vim-capslock>
* enable/disable vim-capslock integration >
let g:airline#extensions#capslock#enabled = 1
------------------------------------- *airline-xkblayout*
vim-xkblayout
* enable/disable vim-xkblayout extension >
let g:airline#extensions#xkblayout#enabled = 1
* define path to the backend switcher library
Linux (Install https://github.com/ierton/xkb-switch):
let g:XkbSwitchLib = '/usr/local/lib/libxkbswitch.so'
macOS (Install https://github.com/vovkasm/input-source-switcher):
let g:XkbSwitchLib = '/usr/local/lib/libInputSourceSwitcher.dylib'
------------------------------------- *airline-windowswap*
vim-windowswap <https://github.com/wesQ3/vim-windowswap>
@@ -690,6 +856,15 @@ vim-windowswap <https://github.com/wesQ3/vim-windowswap>
* set marked window indicator string >
let g:airline#extensions#windowswap#indicator_text = 'WS'
<
------------------------------------- *airline-obsession*
vim-obsession <https://github.com/tpope/vim-obsession>
* enable/disable vim-obsession integration >
let g:airline#extensions#obsession#enabled = 1
* set marked window indicator string >
let g:airline#extensions#obsession#indicator_text = '$'
<
------------------------------------- *airline-taboo*
taboo.vim <https://github.com/gcmt/taboo.vim>
@@ -701,10 +876,10 @@ vim-ctrlspace <https://github.com/szw/vim-ctrlspace>
* enable/disable vim-ctrlspace integration >
let g:airline#extensions#ctrlspace#enabled = 1
<
To make the vim-ctrlspace integration work you will need to make the
ctrlspace statusline function call the correct airline function. Therefore
add the following line into your .vimrc:
add the following line into your .vimrc: >
let g:CtrlSpaceStatuslineFunction = "airline#extensions#ctrlspace#statusline()"
<
@@ -730,6 +905,64 @@ po.vim <http://www.vim.org/scripts/script.php?script_id=2530>
<
* truncate width names to a fixed length >
let g:airline#extensions#po#displayed_limit = 0
------------------------------------- *airline-vimtex*
vimtex <https://github.com/lervag/vimtex>
Shows the current file's vimtex related info.
* enable/disable vimtex integration >
let g:airline#extensions#vimtex#enabled = 1
<
* left and right delimiters (shown only when status string is not empty)
let g:airline#extensions#vimtex#left = "{"
let g:airline#extensions#vimtex#right = "}"
State indicators:
* the current tex file is the main project file (nothing is shown by default)
let g:airline#extensions#vimtex#main = ""
* the current tex file is a subfile of the project
and the compilation is set for the main file
let g:airline#extensions#vimtex#sub_main = "m"
* the current tex file is a subfile of the project
and the compilation is set for this subfile
let g:airline#extensions#vimtex#sub_local = "l"
* single compilation is running
let g:airline#extensions#vimtex#compiled = "c₁"
* continuousr compilation is running
let g:airline#extensions#vimtex#continuous = "c"
* viewer is opened
let g:airline#extensions#vimtex#viewer = "v"
------------------------------------- *airline-ale*
ale <https://github.com/w0rp/ale>
* enable/disable ale integration >
let g:airline#extensions#ale#enabled = 1
* ale error_symbol >
let airline#extensions#ale#error_symbol = 'E:'
<
* ale warning >
let airline#extensions#ale#warning_symbol = 'W:'
<
------------------------------------- *airline-neomake*
neomake <https://github.com/neomake/neomake>
* enable/disable neomake integration >
let g:airline#extensions#neomake#enabled = 1
* neomake error_symbol >
let airline#extensions#neomake#error_symbol = 'E:'
<
* neomake warning >
let airline#extensions#neomake#warning_symbol = 'W:'
<
==============================================================================
ADVANCED CUSTOMIZATION *airline-advanced-customization*
@@ -771,14 +1004,21 @@ Before is a list of parts that are predefined by vim-airline.
* `iminsert` displays the current insert method
* `paste` displays the paste indicator
* `crypt` displays the crypted indicator
* `spell` displays the spell indicator
* `filetype` displays the file type
* `readonly` displays the read only indicator
* `file` displays the filename and modified indicator
* `path` displays the filename (absolute path) and modifier indicator
* `linenr` displays the current line number
* `maxlinenr` dispalys the number of lines in the buffer
* `ffenc` displays the file format and encoding
And the following are defined for their respective extensions:
`hunks`, `branch`, `tagbar`, `syntastic`, `whitespace`
`ale_error_count` `ale_warning_count` `branch` `eclim` `hunks`
`neomake_error_count` `neomake_warning_count` `obsession`
`syntastic-warn` `syntastic-err` `tagbar` `whitespace`
`windowswap` `ycm_error_count` `ycm_warning_count`
------------------------------------- *airline-accents*
Accents can be defined on any part, like so: >
@@ -791,11 +1031,19 @@ colors instead of the section's default foreground color.
The following accents are defined by default. Themes can define their variants
of the colors, but defaults will be provided if missing. >
bold, italic, red, green, blue, yellow, orange, purple
bold, italic, red, green, blue, yellow, orange, purple, none
<
The defaults configure the mode and line number parts to be bold, and the
readonly part to be red.
"none" is special. This can be used, to remove a bold accent from an existing
theme. For example, usually the mode part of the statusline is usually defined
to be bold. However, it can be hard to remove an existing bold accent from the
default configuration. Therefore, you can use the none accent to remove
existing accents, so if you put >
call airline#parts#define_accent('mode', 'none')
the mode section will be set to non-bold font style.
------------------------------------- *airline-sections*
Once a part is defined, you can use helper functions to generate the
statuslines for each section. For example, to use the part above, we could
@@ -814,9 +1062,10 @@ the space and cwd are not defined parts. For convenience, if a part of that
key does not exist, it will be inserted as is. The unit tests will be a good
resource for possibilities.
Note: The use of |VimEnter| is important, because most extensions are lazily
Note: The use of |User| is important, because most extensions are lazily
loaded, so we must give them a chance to define their parts before we can use
them.
them. Also this autocommand is only triggered, after the airline functions are
actually available on startup.
Note: The `airline#section#create` function and friends will do its best to
create a section with the appropriate separators, but it only works for
@@ -858,7 +1107,6 @@ You can also remove a function as well, which is useful for when you want a
temporary override. >
call airline#remove_statusline_func('MyPlugin')
<
==============================================================================
PIPELINE *airline-pipeline*
@@ -992,6 +1240,6 @@ Contributions and pull requests are welcome.
==============================================================================
LICENSE *airline-license*
MIT License. Copyright © 2013-2016 Bailey Ling.
MIT License. Copyright © 2013-2017 Bailey Ling, Christian Brabandt
vim:tw=78:ts=8:ft=help:norl:

View File

@@ -1,6 +1,8 @@
" MIT License. Copyright (c) 2013-2016 Bailey Ling.
" vim: et ts=2 sts=2 sw=2
scriptencoding utf-8
if &cp || v:version < 702 || (exists('g:loaded_airline') && g:loaded_airline)
finish
endif
@@ -37,12 +39,24 @@ function! s:on_window_changed()
if pumvisible() && (!&previewwindow || g:airline_exclude_preview)
return
endif
" Handle each window only once, since we might come here several times for
" different autocommands.
let l:key = [bufnr('%'), winnr(), winnr('$'), tabpagenr(), &ft]
if get(g:, 'airline_last_window_changed', []) == l:key
\ && &stl is# '%!airline#statusline('.winnr().')'
\ && &ft !~? 'gitcommit'
" fugitive is special, it changes names and filetypes several times,
" make sure the caching does not get into its way
return
endif
let g:airline_last_window_changed = l:key
call s:init()
call airline#update_statusline()
endfunction
function! s:on_colorscheme_changed()
call s:init()
unlet! g:airline#highlighter#normal_fg_hi
let g:airline_gui_mode = airline#init#gui_mode()
if !s:theme_in_vimrc
call airline#switch_matching_theme()
@@ -52,7 +66,7 @@ function! s:on_colorscheme_changed()
call airline#load_theme()
endfunction
function airline#cmdwinenter(...)
function! airline#cmdwinenter(...)
call airline#extensions#apply_left_override('Command Line', '')
endfunction
@@ -79,10 +93,14 @@ function! s:airline_toggle()
autocmd CmdwinLeave * call airline#remove_statusline_func('airline#cmdwinenter')
autocmd GUIEnter,ColorScheme * call <sid>on_colorscheme_changed()
autocmd VimEnter,WinEnter,BufWinEnter,FileType,BufUnload,VimResized *
autocmd VimEnter,WinEnter,BufWinEnter,FileType,BufUnload *
\ call <sid>on_window_changed()
if exists('#CompleteDone')
autocmd CompleteDone * call <sid>on_window_changed()
endif
autocmd TabEnter * :unlet! w:airline_lastmode
autocmd VimResized * unlet! w:airline_lastmode | :call <sid>airline_refresh()
autocmd TabEnter * :unlet! w:airline_lastmode | let w:airline_active=1
autocmd BufWritePost */autoload/airline/themes/*.vim
\ exec 'source '.split(globpath(&rtp, 'autoload/airline/themes/'.g:airline_theme.'.vim', 1), "\n")[0]
\ | call airline#load_theme()
@@ -110,7 +128,15 @@ function! s:airline_theme(...)
endfunction
function! s:airline_refresh()
silent doautocmd User AirlineBeforeRefresh
if !exists("#airline")
" disabled
return
endif
let nomodeline=''
if v:version > 703 || v:version == 703 && has("patch438")
let nomodeline = '<nomodeline>'
endif
exe printf("silent doautocmd %s User AirlineBeforeRefresh", nomodeline)
call airline#load_theme()
call airline#update_statusline()
endfunction

View File

@@ -15,7 +15,7 @@ describe 'active builder'
call s:builder.add_section('Normal', 'hello')
call s:builder.add_section('Search', 'world')
let stl = s:builder.build()
Expect stl =~ '%#Normal#hello%#Normal_to_Search#>%#Search#world'
Expect stl =~ '%#Normal#hello%#Normal_to_Search#%#Search#world'
end
it 'should reuse highlight group if background colors match'
@@ -24,7 +24,7 @@ describe 'active builder'
call s:builder.add_section('Foo1', 'hello')
call s:builder.add_section('Foo2', 'world')
let stl = s:builder.build()
Expect stl =~ '%#Foo1#hello>world'
Expect stl =~ '%#Foo1#helloworld'
end
it 'should switch highlight groups if foreground colors differ'
@@ -33,7 +33,7 @@ describe 'active builder'
call s:builder.add_section('Foo1', 'hello')
call s:builder.add_section('Foo2', 'world')
let stl = s:builder.build()
Expect stl =~ '%#Foo1#hello%#Foo1_to_Foo2#>%#Foo2#world'
Expect stl =~ '%#Foo1#hello%#Foo1_to_Foo2#%#Foo2#world'
end
it 'should split left/right sections'
@@ -47,14 +47,14 @@ describe 'active builder'
call s:builder.add_section('Normal', 'hello')
call s:builder.add_section('Search', 'world')
let stl = s:builder.build()
Expect stl =~ 'hello%#Normal_to_Search#<%#Search#world'
Expect stl =~ 'hello%#Normal_to_Search#%#Search#world'
end
it 'should not repeat the same highlight group'
call s:builder.add_section('Normal', 'hello')
call s:builder.add_section('Normal', 'hello')
let stl = s:builder.build()
Expect stl == '%#Normal#hello>hello'
Expect stl == '%#Normal#hellohello'
end
it 'should replace accent groups with the specified group'
@@ -94,7 +94,7 @@ describe 'inactive builder'
call s:builder.add_section('Normal', 'hello')
call s:builder.add_section('Search', 'world')
let stl = s:builder.build()
Expect stl =~ '%#Normal_inactive#hello%#Normal_to_Search_inactive#>%#Search_inactive#world'
Expect stl =~ '%#Normal_inactive#hello%#Normal_to_Search_inactive#%#Search_inactive#world'
end
it 'should not render accents'

View File

@@ -18,9 +18,10 @@ describe 'init sections'
call s:clear()
end
it 'section a should have mode, paste, iminsert'
it 'section a should have mode, paste, spell, iminsert'
Expect g:airline_section_a =~ 'mode'
Expect g:airline_section_a =~ 'paste'
Expect g:airline_section_a =~ 'spell'
Expect g:airline_section_a =~ 'iminsert'
end
@@ -58,12 +59,21 @@ describe 'init sections'
end
it 'all default statusline extensions should be blank'
Expect airline#parts#get('ale_error_count').raw == ''
Expect airline#parts#get('ale_warning_count').raw == ''
Expect airline#parts#get('hunks').raw == ''
Expect airline#parts#get('branch').raw == ''
Expect airline#parts#get('tagbar').raw == ''
Expect airline#parts#get('syntastic').raw == ''
Expect airline#parts#get('eclim').raw == ''
Expect airline#parts#get('neomake_error_count').raw == ''
Expect airline#parts#get('neomake_warning_count').raw == ''
Expect airline#parts#get('obsession').raw == ''
Expect airline#parts#get('syntastic-err').raw == ''
Expect airline#parts#get('syntastic-warn').raw == ''
Expect airline#parts#get('tagbar').raw == ''
Expect airline#parts#get('whitespace').raw == ''
Expect airline#parts#get('windowswap').raw == ''
Expect airline#parts#get('ycm_error_count').raw == ''
Expect airline#parts#get('ycm_warning_count').raw == ''
end
end

View File

@@ -57,13 +57,13 @@ describe 'section'
it 'should force add separators for raw and missing keys'
let s = airline#section#create_left(['asdf', 'raw'])
Expect s == 'asdf > raw'
Expect s == 'asdf raw'
let s = airline#section#create_left(['asdf', 'aaaa', 'raw'])
Expect s == 'asdf > aaaa > raw'
Expect s == 'asdf aaaa raw'
let s = airline#section#create_right(['raw', '%f'])
Expect s == 'raw < %f'
Expect s == 'raw %f'
let s = airline#section#create_right(['%t', 'asdf', '%{getcwd()}'])
Expect s == '%t < asdf < %{getcwd()}'
Expect s == '%t asdf %{getcwd()}'
end
it 'should empty out parts that do not pass their condition'
@@ -72,5 +72,10 @@ describe 'section'
let s = airline#section#create(['conditional'])
Expect s == '%{0 ? airline#util#wrap("conditional",0) : ""}'
end
it 'should not draw two separators after another'
let s = airline#section#create_right(['ffenc','%{strftime("%H:%M")}'])
Expect s == '%{airline#util#prepend(airline#parts#ffenc(),0)}%{strftime("%H:%M")}'
end
end

View File

@@ -17,12 +17,12 @@ describe 'util'
it 'has append wrapper function'
Expect airline#util#append('', 0) == ''
Expect airline#util#append('1', 0) == ' > 1'
Expect airline#util#append('1', 0) == ' 1'
end
it 'has prepend wrapper function'
Expect airline#util#prepend('', 0) == ''
Expect airline#util#prepend('1', 0) == '1 < '
Expect airline#util#prepend('1', 0) == '1 '
end
it 'has getwinvar function'
@@ -40,8 +40,8 @@ describe 'util'
end
it 'should ignore minwidth if less than 0'
Expect airline#util#append('foo', -1) == ' > foo'
Expect airline#util#prepend('foo', -1) == 'foo < '
Expect airline#util#append('foo', -1) == ' foo'
Expect airline#util#prepend('foo', -1) == 'foo '
Expect airline#util#wrap('foo', -1) == 'foo'
end