In KDE SC 4.8, Kate was extended by the line modification indicators. These indicators show you what lines currently contain unsaved data, but also lines that were once changed but now are saved to disk:
With Kate in KDE 4.13, we have two new actions in the Edit menu:
- Move to Previous Modified Line
- Move to Next Modified Line
In the screenshot above, moving to the next modified line does nothing, since we are already at the very end of the document. Moving to the previous modified line first goes to line 4, then to line 2, and finally to line 1. By default, no shortcuts are assigned, so if you you want to use this, it makes a lot of sense to configure shortcuts.
Modified and saved lines are treated equally, so maybe we should rather call it “touched” lines, since all lines that were touched by the user at some point in the edit history are taken into account.
The rationale behind these two actions is to allow fast navigation in the text that you actually work on. Jumping over hundreds of untouched lines is quite handy.
Hope this is useful
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
- 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
- vi input mode: expose more motions in visual mode
- status bar: better sorting
- tab bar: add tab also for documents without view
- tab tracking: simplify, make tab switching work
- tab bar tabs: track document name changes
- status bar: fix sizing mess (part 1¸ part 2, part 3, part 4, part 5)
- work around QSpinBox pluralizable issues
- revert quick open shortcut
- fix viewChanged() signals
- search & replace plugin: fix signals
- remove all tab bar plugins due to the built-in one
- sync syntax xml file changes from master
- Skanlite: fix layout¸more porting, less K classes
- status bar: no resize between status bar, goto line and internal command line, more, more¸more
- add split view actions to view space navigation tab bar
- no document duplicates in quick open
- fix broken scroll bars when opening remove files
- derive KateViewSpace from QWidget instead of QFrame
- remove focus rect from view
- Fix painting bug when scrolling while floating widgets are shown
- allow empty view spaces
- cleanup of ViewManager and ViewSpace logic (1, 2, 3,
- extend ConfigInterface: icon-border-color, folding-marker-color, line-number-color, modification-markers
- Skanlite: bug finding in framworksintegration module, fix focus
- status bar: make spaces and tabs configurable
- use popup for split actions in view space bar
- show short cut in tool tip (cool one!)
- remove KTE::View::informationMessage() in favour of the MessageInterface
- Kate, KWrite: show modification asterisk in title bar
- view space tab bar: refactor, polish, fix sizing of tabs, more
- status bar: polishing, cleanups
- relicense file tree
- Kate’s view manager: cleanup, more cleanup¸more, more
- KWrite: reformat to kdelibs coding style
- Kate: reformat to kdelibs coding style
- set Document read-only on too long lines wrap
- view space tab buttons: elide if too long text
- view space tab bar: add action “Close other Views“
- avoid flicker in Kate
- Kate: in fullscreen mode, show a button in the corner of the menu bar to escape the fullscreen mode
- KTextEditor: add actions jump to bracket and select to bracket
- API documentation: split docs
- kate view space tab bar: implement correct document switching
- tab bar: attempt for better sizing, again
- API documentation: update porting guide
- better order of elements in status bar¸not bold
- Kate: turn SessionConfigWigdet into .ui-file
- refactor Kate source code
- attempt to make tab bar work as expected, another one
- Python plugin updates
- Kate View Space: allow to maximize a view space (cool!)
- refactor Kate View Space a bit
- small cleanup of view manager¸ again
- performance: use QHash instead of QList for lookups
- more cleanups with respect to view/document management, remove more API, and more removal¸ more
- fix bug in bash.xml
- loading message for file with too long lines: provide button to reload without limit
January, 25th (departure day):
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)
Saturday most Kate developers will depart, therefore now the most work has been finalized (or at least brought to some intermediate state that works OK).
Below, the mandatory screenshot, Kate started without any configuration set in the framework branch, new and shiny:
Find the differences
And one screenshot with some files open:
After the first initial status bar integration into the KatePart, we thought a bit more about what users might expect. Looking at the competition, one common feature is to allow quick-switching the indentation settings.
Joseph gave that a try and we now have an even better version available in the KF5 KTextEditor framework.
Mandatory screenshot (KWrite, Kate or other applications using it will look the same), updated version after feedback below:(Update: Using now again non-bold + Line/Column swapped with status)