Kate/KDevelop/Skanlite Sprint Wrap-Up
From 18th to 25th of January 2014, the Kate, KDevelop and Skanlite developers met in Barcelona to work on these projects full time for a week. Full time usually implies about 14 hours per person a day (yes, besides food, we do nothing but developing). 11 developers working 14 hours a day for 7 days makes a total of 1078 hours. If we divide this by 8 hours, the typical amount of work hours in a day, this makes 134 man-days of work, or about 27 weeks of continued development time. While this calculation is a bit theoretical, it is still very valid to estimate the amount of work that is put into these projects during such a sprint, especially since usually developers have far less time for development in their spare time.
The efforts focus mostly on KDE Frameworks 5, so what is listed next is mostly relevant only for the KF5/Qt5 version of Kate etc. Going through the Kate and Skanlite commits from 18th to the 25th of January, we have (not listing all commits):
January, 18th (arrival day):
- KTextEditor::Cursor and KTextEditor::Range are declared as Q_MOVABLE_TYPE, telling Qt containers that these primitive types can be mem-moved without copy constructor.
- since KTextEditor and KatePart are now merged into a single list, the API was changed such that KTextEditor::Editor::instance() is a singleton. Therefore, KTextEditor::Document::editor() was dropped, as it is not needed anymore.
- vi input mode: new sentence text object
- merged code completion models
- some API cleanups
- removed ModeInterface, which was never implemented
January, 19th:
- vi input mode: enabled numbered registers for “q” command
- removed hack setSuppressOpeningErrorDialogs
- cleaner codeflow for default encoding
- more API cleanups
- merged HighlightInterface into KTE::Document
- change Editor implementation such that it can be extended in a binary compatible way
- make find previous button in searchbar in vi-mode work
- change View implementation such that it can be extended in a binary compatible way
- change Document implementation such that it can be extended in a binary comptible way
- vi input mode: added “(” and “)” motions
- run astyle on KTextEditor interfaces
- API cleanup: return strings by value
- port accessibility interface to Qt5 (more, more)
- start of porting libksane to Qt5 and KDE Frameworks 5 (more)
- make KateRenderer work without a view
- add back KTextEditor::Document::print/printPreview() interface
- file tree: add print actions to context menu
- remove complex KTE::Document::textChanged() signal
- libksane: remove compiler warnings
- port the gdb backtrace browser plugin to Qt5 and the new KTextEditor plugin interfaces
- adapt the Konsole plugin to interface changes
- gdb backtrace browser: compile without kde4support
- fix invalid disconnect due to new Qt connect syntax (tricky one!)
- libksane: remove kde4support (more)
- KTE::Document: do not emit signals on file close
- gdb backtrace browser fully ported, ran astyle, add unit test
- delete KTextEditor::Smart* convenience includes
- KTextEditor::Editor is a singleton now
- libksane: make make install work
- KWrite: singleton cleanup
- refactor KTextEditor module: part 1, part 2, part 3,
- vi input mode: don’t launch commands through commandBar
- remove autobrace plugin in favour of sanebrace plugin in KF5
- vi input mode: add paragraph text object
- KateScriptDocument cleanups
- more interface cleanups
- fix XML indentation after self-closing tags
- completion model: properly emit layoutChanged
- SQL plugin: start port, more porting, and more¸more, more, ....., done!
- libksane: adhere to KF5 frameworks template, more, more, works
- Skanlite: start porting to KDE Frameworks 5
- port CTags plugin to KTextEditor framework
- vi input mode: cleanups
- vi input mode: remove vi specifics from KateCmdLineEdit
- fix frameworks template
January, 20th:
- fix cstyle indenter bug
- cleanup cmake files
- port File System Browser plugin to new KTextEditor plugin interfaces
- fix porting bugs, more fixing
- xml tools: port to new KTextEditor interfaces, remove kde4support, run astyle
- huge KWrite code cleanup
- let automoc do the work
- move filetree “Documents” to addons folder, add Messages.sh
- KMessageWidget: extend API, show example image in docs
- remove tip of the day
- fix generation of API documentaion, extend API documentation
- removed KateScriptConsole, was unfortunately not used much
- refactor unit tests, more
- vi input mode: fix two crashes in undo/redo operations
- use new KMessageWidget API in KatePart’s notification system
- fix queuing of “Search Wrapped” messages
- port GDB Plugin to new KTextEditor interfcaes in KDE frameworks 5
- Skanlite: use cmake frameworks template
- turn dynamic word wrap on by default
- completion popup: better sorting
- Build Plugin: add support for Intel icpc error messages
- port Open Header plugin¸ cleanups
January, 21th:
- Kate App: less friend classes, and even more less friends
- Kate App: refactor waiter class
- .kateconfig files are now always searched in ALL parent folders (not configurable anymore)
- better recursion guard for .kateconfig lookup
- DocumentPrivate::closeUrl() cleanup
- Skanlite: port dialogs, use QApplication¸more porting
- KTextEditor API documentation: porting notes
- Search: Ctrl+H now sets cursor to end of selection
- KTextEditor: start adding a default status bar
January, 22th:
January, 23th:
January, 24th:
- huge refactor of how document management works
- fix view activation workflow
- avoid empty view spaces
- view manager: less public api
- avoid hell breaking loose
- document manager: less public api, same for view manager
- include cleanups
- move plugins, same for plasma launcher
- improve expanding tree in code completion
- tab bar: huge code cleanup, close action as context menu
- avoid recursive opening of folders
- Kate: add Recent File List count setting, more¸and done
- double click on Line/Column in status bar: open goto bar
- status bar: double click toggles INSERT/OVR¸and cleanup
- Kate: less flicker caused by doc manager
- remove api from editor
- KateGlobal: less linear searches in lists
- view space tab bar: add close button
- no hard-coded plugin loading
- resort status bar once more :-)
- Kate Part’s default indentation is now 4 spaces (fix unit test)
- Kate View Space: merge tabs of closed view space into active view space
- fix indent option caused by indent width change
- adapt message catalog to ktexteditor5.pot
- cleanup TODO list
- Kate: merge show/hide single-view-mode
- KTE::Document: use a hash
- Kate view space tab bar: allow to hide tab bar
- KTextEditor plugins: allow with X-KTextEditor-Load-Default to add apps that load a plugin by default, implement in Kate
- load Search & Replace plugin and File Tree by default
- cleanup KTextEditor::TextHintInterface
- avoid crash on first Kate start
- status bar indent settings: indicate dialog with …
January, 25th (departure day):
- nice breakfast with croissants, then to the airport :-)
- double click in empty space in tab bar creates new document
- swap quick open and window splitting buttons in view space tab bar
- Projects plugin: only create tool views if applicable
- port some commits from KDE 4 branch to KF5 branch
- allow detection of HTML encoding
- vi input mode: fix some unit tests¸more tests
- same for file tree unit tests
- Skanlite: more porting
In the days after the sprint we did a lot more fine tuning and cleanups with respect to the changes we did during the sprint. So let’s have a look at Kate before the sprint:
Kate after the sprint:
So Kate changed in several ways:
- New status bar: The status bar is in the KTextEditor interfaces now. That implies that KDevelop, Kile, and all other applications using the KTextEditor framework will have the same status bar.
- It is now possible to change the indent settings (tabs, spaces) through the status bar. The same holds for the encoding and the current highlighting.
- Double click on “Line: …, Column: …” switches into goto-mode (Ctrl+G).
- Double click on INSERT changes to OVERWRITE mode, if not in vi input mode.
- New Tab Bar in each view space: This tab bar shows the documents you are working on in a least recently used (LRU) fashion. It only shows as many tabs as fit into the tab bar, since we want to avoid horizonal scrolling (it does not scale). If not all documents fit into the tab bar, just use the Documents tab on the left, or the quick open icon in the view space tab bar bar on the right to to launch quick open.
- Since we now have a tab bar, we can now show the splitting actions at a more prominent place on the very right. New features include to hide inactive views, which equals maximizing the current view space.
- Yes, no worries, the tab bar can be disabled.
We’ll cover the workflow of the tab bar in a separate blog post.
…oh, and we have much more in the pipe (not related to the sprint) :-)