{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":328505994,"defaultBranch":"master","name":"vim-tpipeline","ownerLogin":"vimpostor","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-01-11T00:07:46.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/21310755?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1665762510.4917362","currentOid":""},"activityList":{"items":[{"before":"278b0c8f97d0d3651f2bb7127432ea926a3dffea","after":"5dd3832bd6e239feccb11cadca583cdcf9d5bda1","ref":"refs/heads/master","pushedAt":"2024-04-12T22:43:33.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Batch updates\n\nWhile the performance of tpipeline itself has been optimized quite a\nwhile for now, it is still possible for a bottleneck to appear, if the\ndownstream consumer is too slow.\n\nThe problem does not really show up when using tmux, but when using\nother external integrations (e.g. kitty), it is possible that the\nexternal statusline update can become a bottleneck. Kitty's custom\ntabbar integration being written in Python does not really help with\nthis.\n\nIt should be noted that this has never caused any delays in vim itself,\ngiven that this bottleneck only happens in the part, that is already\nrunning completely asynchronous from vim itself.\n\nBut it could cause some hilarious problems, where the external\nstatusline starts to lag behind noticably behind the live statusline in\nvim.\n\nTo fix this we batch updates by depleting stdin completely before\ndispatching the external statusline update.\nUnfortunately there is not really a very good way to test if stdin\ncontains more data just with shell code.\n\nWe opt to use a hack with \"read -t\", which will fail immediately if\nstdin is empty:\n\n-t timeout time out and return failure if a complete line of\n\tinput is not read within TIMEOUT seconds. The value of the\n\tTMOUT variable is the default timeout. TIMEOUT may be a\n\tfractional number. If TIMEOUT is 0, read returns\n\timmediately, without trying to read any data, returning\n\tsuccess only if input is available on the specified\n\tfile descriptor. The exit status is greater than 128\n\tif the timeout is exceeded\n\nThis is a complete hack, because \"-t\" is not really portable across sh\nimplementations, e.g. the slightly widely used dash does not support it.\n\nWe are very lucky with this specific codepath though, because \"sh does\nnot support -t\" and \"there is no more stdin data ready\" have the same\nexit code, thus sh implementations not supporting this flag will\nautomatically fallback to the old unbatched update path, i.e. they will\nnever enter the inner while loop.\n\nIf this however still ever causes problems in the future, we could think\nabout using bash instead of sh. Both are basically preinstalled\neverywhere anyway.\n\nWith this we can also lower the catchup time in the performance test, as\nthe lagging behind is completely fixed now.\n\nIn any case this also adds a completely new unit test that tests the\nlag-behind after updating the statusline every millisecond for 3\nseconds.\n\nFixes #64","shortMessageHtmlLink":"Batch updates"}},{"before":"649f079a0bee19565978b82b672d831c6641d952","after":"278b0c8f97d0d3651f2bb7127432ea926a3dffea","ref":"refs/heads/master","pushedAt":"2024-04-11T23:15:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"kitty: Do not copy linefeed\n\nThe statusline pipe **always** contains a LF character at the end. This\nis needed, because the \"#(cat ...)\" call for the tmux statusline works\nin a line-oriented way and actually requires the LF to make the\nstatusline appear.\n\nUp until recently the kitty statusline worked just fine with that LF,\nbut it seems that now kitty displays a blank line if we add a LF to the\nstatusline (which is not entirely unreasonably by kitty).\n\nTherefore we remove the LF from the read pipe, which we can just\nhardcode, because it will always be there.\n\nFixes #65","shortMessageHtmlLink":"kitty: Do not copy linefeed"}},{"before":"c414612d6e77a2a4ba8ae2ad4be6d10964b8144c","after":"649f079a0bee19565978b82b672d831c6641d952","ref":"refs/heads/master","pushedAt":"2024-02-18T18:05:01.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"doc: Clarify size callback\n\nIt is not correct that it is called on every statusline evaluation.\nIt's only called heuristically, e.g. when starting up or when the vim\nwindow size changes.\n\nIf the users want to update the size at their own rate, they can still\njust set g:tpipeline_size directly.","shortMessageHtmlLink":"doc: Clarify size callback"}},{"before":"86be2d4d7719db34d651df4690ab5f49274c646a","after":"c414612d6e77a2a4ba8ae2ad4be6d10964b8144c","ref":"refs/heads/master","pushedAt":"2024-02-18T17:59:50.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Add a callback to provide external statusline sizes\n\nThis is necessary if the statusline is not embedded in tmux, but in a\ndifferent external statusline (e.g. the statusline of the window\nmanager or the kitty statusline).\n\nThis was one of the missing pieces to allow embedding the statusline\nproperly in arbitrary external statuslines.\n\nFixes #60","shortMessageHtmlLink":"Add a callback to provide external statusline sizes"}},{"before":"bff212497e0873ef7c97bd1e3d59cf57d6627581","after":"86be2d4d7719db34d651df4690ab5f49274c646a","ref":"refs/heads/master","pushedAt":"2024-01-27T15:41:50.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Update README","shortMessageHtmlLink":"Update README"}},{"before":"2889cbdbe756324e1e21716a34b3d36b058f959e","after":"bff212497e0873ef7c97bd1e3d59cf57d6627581","ref":"refs/heads/master","pushedAt":"2023-10-13T23:00:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Ignore fcs chars in the default statusline\n\nOtherwise we get the weird \"-\" fillchars outside of tmux in the middle\nof our statusline. We really only want them to appear when they are part\nof the border between two windows.\nUnfortunately vim does not allow to configure the fillchars for the real\nstatusline and for border lines separately (most people also don't have\nborder lines, because they don't have something like laststatus=0 plus\nfcs set, so for them the real statusline renders inbetween windows).\n\nTo fix this, we use the Ignore highlight group to color the middle\nsection, which just happens to make the fillchars transparent.\nThis statusline is not evaluated for window borders, so luckily they\nstill appear there with the original highlight group.","shortMessageHtmlLink":"Ignore fcs chars in the default statusline"}},{"before":"e56cd62aeb13681c7c0be86b6b0e99baa157a984","after":"2889cbdbe756324e1e21716a34b3d36b058f959e","ref":"refs/heads/master","pushedAt":"2023-09-10T22:37:43.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Add workaround for inconsistent statusline eval padding\n\nIt seems that neovim applies inconsistent padding when evaluating the\nstatusline:\n\n- When padding a normal component, e.g. \"%5l\", then the global fillchars\n option is used\n- When padding a grouped component with minwid, e.g. \"%2(a%)\", then the\n fillchars parameter for nvim_eval_statusline() is used\n\nIt is this inconsistent padding that causes our statusline split\nheuristic to mistakenly think that a grouped component is the actual\nsplit of the statusline (like \"%=\"), while it is actually not.\nThis caused some statuslines (in particular heirline, luckily not many\nother popular statuslines use grouped components like this) to have very\nweird and early right alignment.\nThis is obviously not the fault of those statuslines, but it turns out\nthat this bug is not very easy to fix in upstream neovim.\nIdeally we would have API in nvim_eval_statusline() that would tell us\nthe split point directly, then we could avoid these nasty heuristics\naltogether.\n\nSo instead I came up with a workaround in the meantime. Keep in mind,\nthis workaround is absolutely horrid, but at least it works. Hopefully\nwe can resolve this problem properly, but for now I have added a unit\ntest to make sure that we don't regress this further.\n\nAlso fuck whoever masochist came up with 1-based indexes in Lua. It's\ncausing off-by-one errors literally everywhere, and unfortunately that's\nnot even the worst part about this horrible language.\n\nFixes #58","shortMessageHtmlLink":"Add workaround for inconsistent statusline eval padding"}},{"before":"87283a2358f4aa27735c6ade7d5cb0e24fe03381","after":"e56cd62aeb13681c7c0be86b6b0e99baa157a984","ref":"refs/heads/master","pushedAt":"2023-08-26T22:18:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Add help tags to gitignore\n\nWe don't need to track them in VCS, because they are generated by most\nplugin managers automatically.","shortMessageHtmlLink":"Add help tags to gitignore"}},{"before":"0fcbe14fdfc3b86b8a41f7cdaa67dd2041cb77fe","after":"87283a2358f4aa27735c6ade7d5cb0e24fe03381","ref":"refs/heads/master","pushedAt":"2023-08-20T10:44:10.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Add more thorough documentation for external integration\n\nThis is the first step in adding easier support for external statusline\nintegrations.\nIn the future we can add more examples for programs such as zellij,\nWM statuslines, etc...\n\nThese docs always should go into separate files so that the main\ndocumentation doesn't get bloated.\n\nWe could also think about adding an extra configuration variable that\ncan toggle between some popular external statusline examples.","shortMessageHtmlLink":"Add more thorough documentation for external integration"}},{"before":"457c0d56f16f6c26f2bd21b7c2e56ccbfaef692a","after":"0fcbe14fdfc3b86b8a41f7cdaa67dd2041cb77fe","ref":"refs/heads/master","pushedAt":"2023-08-19T14:05:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Check that colorscheme has true color support\n\nUnfortunately neovim has no support for hlget() yet [0], so this got a\nlittle bit more complicated there.\n\nAlso what the hell is wrong with Lua to overcomplicate basic things such\nas getting the name of the colorscheme. Apparently we have to use the\ngeneric vimscript command interface [1] just for this.\n\nIt's kind of funny how the Lua API now has `api.nvim_cmd()`,\n`api.nvim_exec()` and `api.nvim_exec2()` similar to how libc has evolved\nto have 1000 alternatives to strcpy() and every year they release a new\nversion that is apparently safer.\nSo when will we get `api.nvim_exec3()`? ;)\n\n[0] https://github.com/neovim/neovim/pull/16270\n[1] https://github.com/neovim/neovim/issues/18201","shortMessageHtmlLink":"Check that colorscheme has true color support"}},{"before":"cb74f1934411f4b5f911b9cd5b0aceb72c9c2961","after":"457c0d56f16f6c26f2bd21b7c2e56ccbfaef692a","ref":"refs/heads/master","pushedAt":"2023-08-15T21:56:04.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Mention checkhealth in docs","shortMessageHtmlLink":"Mention checkhealth in docs"}},{"before":"2c88f0b2517f9eb9bbfec3195a46150726c05bbd","after":"cb74f1934411f4b5f911b9cd5b0aceb72c9c2961","ref":"refs/heads/master","pushedAt":"2023-08-15T21:00:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Add basic checkhealth support\n\nNeovim can use this API to report errors to the user.","shortMessageHtmlLink":"Add basic checkhealth support"}},{"before":"df0267194271714a7ddc2375897778fd24583a47","after":"2c88f0b2517f9eb9bbfec3195a46150726c05bbd","ref":"refs/heads/master","pushedAt":"2023-05-07T23:33:35.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Disable updates after VimLeavePre\n\nOtherwise we may accidentally trigger a chansend() when the\ncorresponding job is already dead, which will print an error message\nlike:\n\nError detected while processing function 2[1]..tpipeline#lualine#fix_stl[9]..tpipeline#update:\nline 34:\nCan't send data to closed stream\n\nThis issue only happened in the lualine codepath (since this is the only\npart where we are using timers).\nIt was already fixed upstream with neovim switching the TUI to a\nseparate process [0].\nHowever, let's fix this on this plugin site for neovim 0.8 users.\n\nAlso in neovim 0.8 debug builds there is an issue with neovim taking 2\nseconds to exit with lualine. This is not related to this plugin, but\nlualine's fault for not closing all libuv handles [1]. Get your shit\ntogether, lualine!\n\nFixes #56\n\n[0] https://github.com/neovim/neovim/pull/18375\n[1] https://github.com/neovim/neovim/issues/18670","shortMessageHtmlLink":"Disable updates after VimLeavePre"}},{"before":"b492a5717ba513b32a5d310fab7b9b0401eb0b57","after":"df0267194271714a7ddc2375897778fd24583a47","ref":"refs/heads/master","pushedAt":"2023-05-05T18:56:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Check the current window status line before updating it (#54)","shortMessageHtmlLink":"Check the current window status line before updating it (#54)"}},{"before":"34a38d938f6e6145dea6307f7706480070ddf5c4","after":"b492a5717ba513b32a5d310fab7b9b0401eb0b57","ref":"refs/heads/master","pushedAt":"2023-04-20T22:46:32.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Fix highlight of debug output\n\nIt's not really valid json, so let's just format it as text.","shortMessageHtmlLink":"Fix highlight of debug output"}},{"before":"33434a26c8b057bcf6ed20f10fa888b2ed82e2cc","after":"34a38d938f6e6145dea6307f7706480070ddf5c4","ref":"refs/heads/master","pushedAt":"2023-04-20T21:08:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Reset laststatus for lualine\n\nThe bullshittery of workarounds we need just for lualine continues...\n\nOf course lualine has hardcoded setting laststatus to some value with\ntheir fucking useless globalstatus option [0].\n\nLet's reset it after VimEnter again, just because lualine is a special\nsnowflake.\n\nTop investigators around the world are still trying to find out why\nanyone with a sane mind would use lualine's globalstatus option (that\nsets laststatus=3 for them) instead of just directly setting\nlaststatus=3.\n\nFixes #53\n\n[0] https://github.com/nvim-lualine/lualine.nvim/blob/84ffb80e452d95e2c46fa29a98ea11a240f7843e/lua/lualine.lua#L521","shortMessageHtmlLink":"Reset laststatus for lualine"}},{"before":"44c6fe7810050513731db15708407ccbc542e981","after":"33434a26c8b057bcf6ed20f10fa888b2ed82e2cc","ref":"refs/heads/master","pushedAt":"2023-04-02T16:34:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Guard restore variables against misconfigured shells\n\nThis applies the same idea from 44c6fe7810050513731db15708407ccbc542e981\nto the restore variables.\n\nIt is needed because some weird misconfigured shells may prefix every\nshell output with some weird escape codes.\n\nFixes #52","shortMessageHtmlLink":"Guard restore variables against misconfigured shells"}},{"before":"5f663e863df6fba9749ec6db0a890310ba4ad0a9","after":"44c6fe7810050513731db15708407ccbc542e981","ref":"refs/heads/master","pushedAt":"2023-04-02T00:56:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Split off window_width message from shell output\n\nWe have to explicitly print a newline to improve robustness.\nThis is an addendum to 5f663e863df6fba9749ec6db0a890310ba4ad0a9 and\nshould help with #52.","shortMessageHtmlLink":"Split off window_width message from shell output"}},{"before":"5de7c75cb7b92f15cceb2f42bda91029d30b03cc","after":"5f663e863df6fba9749ec6db0a890310ba4ad0a9","ref":"refs/heads/master","pushedAt":"2023-04-02T00:20:36.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Wrap set_size in sh\n\nSome shells may be weird and add some extra escape codes.\nLet's just force this to be run with sh to get rid of these external\nvariables outside of our control.\n\nWe had a similar problem in #27 already and now it occurs in a different\nform.\n\nFixes #52","shortMessageHtmlLink":"Wrap set_size in sh"}},{"before":"731f62d0dee6d551a1a5dbaaf7e5cff64360d611","after":"5de7c75cb7b92f15cceb2f42bda91029d30b03cc","ref":"refs/heads/master","pushedAt":"2023-03-31T21:53:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Allow to strip highlights in tests\n\nThis makes the tests more robust, as we can now use assert_equal()\ninstead of the weaker assert_match().\n\nWe need to strip highlights, because neovim by default always prefixes\nthe statusline with the 'StatusLine' highlight group in\nnvim_eval_statusline(), which is not the case for our vim evaluation.","shortMessageHtmlLink":"Allow to strip highlights in tests"}},{"before":"77bd3e8ec5688cf3d03eb77e34e312913e206b5d","after":"731f62d0dee6d551a1a5dbaaf7e5cff64360d611","ref":"refs/heads/master","pushedAt":"2023-03-29T21:43:22.777Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Relax assumptions about log file format\n\nWe only need to test, that the correct lines still contain the total\ntime and self time, the rest doesn't really matter.\n\nWe need to relax this, because while\n77bd3e8ec5688cf3d03eb77e34e312913e206b5d fixed the tests for vim, it\nbroke them for neovim, as that specific patch wasn't cherry-picked into\nneovim yet.","shortMessageHtmlLink":"Relax assumptions about log file format"}},{"before":"bde36fce7165f6b414afab6a0723133730f0f27d","after":"77bd3e8ec5688cf3d03eb77e34e312913e206b5d","ref":"refs/heads/master","pushedAt":"2023-03-27T20:26:43.847Z","pushType":"push","commitsCount":2,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Fix tests not passing for vim\n\nVim introduced more accurate profiling accuracy in commit\n076de79ad832558267b3ff903c048df2f4c1a5d6 [0], which increases the\nprecision down to nanosecond precision.\n\nHowever this collides with printf(\"%f\") accuracy, which starts rounding\nfloating point numbers much earlier. Since we compare the evaluated\nstring with the real value retrieved from the benchmarking log file, we\nget an error if they don't match perfectly.\n\nArguably that comparison is a bit too strict anyway, but luckily we can\njust set the precision for printf() by adding a \".x\" prefix.\n\nThis makes the tests pass again.\n\n[0] https://github.com/vim/vim/pull/12129","shortMessageHtmlLink":"Fix tests not passing for vim"}},{"before":"779180e3c75ca70cff33936d7c3d5c9cef0bc977","after":"bde36fce7165f6b414afab6a0723133730f0f27d","ref":"refs/heads/master","pushedAt":"2023-03-17T11:16:44.922Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Fix error when detecting lualine","shortMessageHtmlLink":"Fix error when detecting lualine"}},{"before":"c3805441a378ed3891cefebea1c2e62a66cffb73","after":"779180e3c75ca70cff33936d7c3d5c9cef0bc977","ref":"refs/heads/master","pushedAt":"2023-03-15T23:43:51.654Z","pushType":"push","commitsCount":1,"pusher":{"login":"vimpostor","name":"Magnus Groß","path":"/vimpostor","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/21310755?s=80&v=4"},"commit":{"message":"Add docs about embedding in the kitty statusline\n\nSee #35 for more info.","shortMessageHtmlLink":"Add docs about embedding in the kitty statusline"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEL4QVywA","startCursor":null,"endCursor":null}},"title":"Activity · vimpostor/vim-tpipeline"}