# 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&reg; 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&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
Tortoisehg-develop mailing list
Tortoisehg-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to