# HG changeset patch # User Henrik Stuart <henrik.stu...@edlund.dk> # Date 1253735375 -7200 # Node ID 20942faacc84aea6fbead4b389ee5c72e1e906e1 # Parent 0702138404e463db876e3bb26d68f417c1dd92b0 commit: support paragraph-wise reflow to current message format
diff -r 0702138404e4 -r 20942faacc84 tortoisehg/hgtk/commit.py --- a/tortoisehg/hgtk/commit.py Wed Sep 23 20:41:50 2009 +0200 +++ b/tortoisehg/hgtk/commit.py Wed Sep 23 21:49:35 2009 +0200 @@ -347,6 +347,7 @@ self.text = gtk.TextView() self.text.connect('populate-popup', self.msg_add_to_popup) + self.text.connect('key-press-event', self._reflow) self.text.modify_font(pango.FontDescription(self.fontcomment)) scroller.add(self.text) gtklib.addspellcheck(self.text, self.repo.ui) @@ -521,6 +522,56 @@ setlabel(self.parent2_label, ctxs[1], isheads[1]) self.parent2_label.show() + def _reflow(self, widget, event, *args): + if event.state & gtk.gdk.MOD1_MASK and gtk.gdk.keyval_name(event.keyval) == 'q': + buffer = widget.get_buffer() + pos = buffer.get_property('cursor-position') + start = buffer.get_iter_at_offset(0) + end = start.copy() + end.forward_to_end() + + text = hglib.tounicode(buffer.get_text(start, end)) + if pos == len(text): + pos -= 1 + + sentence_begin = text.rfind('\n\n', 0, pos) + while sentence_begin >= 0 and text.rfind('\n\n', 0, pos - 1) == sentence_begin - 1: + sentence_begin -= 1 + if sentence_begin == -1: + sentence_begin = 0 + while sentence_begin < len(text) and text[sentence_begin] == '\n': + sentence_begin += 1 + + sentence_end = text.find('\n\n', sentence_begin + 1) + if sentence_end == -1: + sentence_end = len(text) + + pre_sentence = text[:sentence_begin] + post_sentence = text[sentence_end:] + sentence = text[sentence_begin:sentence_end] + + parts = sentence.replace('\r', '').replace('\n', ' ').replace('\t', ' ').split(' ') + line_width = int(self.repo.ui.config('tortoisehg', 'messagewrap', 80)) + new_sentence = [''] + + for part in parts: + if len(new_sentence[-1]) + len(part) > line_width: + new_sentence.append('') + + new_sentence[-1] += '%s ' % part + + sentence = u'\n'.join([x.strip() for x in new_sentence]).encode('utf-8') + + new_pos = len(pre_sentence + sentence) + buffer.set_text(pre_sentence + sentence + post_sentence) + + new_pos_iter = buffer.get_iter_at_offset(new_pos) + buffer.place_cursor(new_pos_iter) + m = buffer.create_mark('newcurspos', new_pos_iter, False) + self.text.scroll_mark_onscreen(m) + buffer.delete_mark(m) + + def realize_settings(self): self.vpaned.set_position(self.setting_vpos) if not self.showparents: ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ Tortoisehg-develop mailing list Tortoisehg-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop