#include <ctype.h>
#include <string.h>
-
+#include <stdlib.h>
#include <gdk/gdkkeysyms.h>
#include <gdk/gdki18n.h>
#include <gtk/gtkmain.h>
case GDK_Page_Down: move_cursor_page_ver (text, +1); break;
/* CUA has Ctrl-Up/Ctrl-Down as paragraph up down */
case GDK_Up:
- if (text->wrap_rmargin > 0) {
- /* SYLPHEED
- */
- move_cursor_to_display_row_up(text);
- }
- else {
- move_cursor_ver (text, -1);
- }
+ move_cursor_to_display_row_up(text);
+ /* move_cursor_ver (text, -1); */
break;
case GDK_Down:
move_cursor_to_display_row_down(text);
if (text->use_wchar)
{
+ gchar mb[MB_LEN_MAX];
+ gint mb_len_1;
+ gint mb_len_2;
+
+ mb_len_1 = wctomb (mb, GTK_STEXT_INDEX (text, lp.end.index));
while (!gdk_iswspace (GTK_STEXT_INDEX (text, lp.end.index)) &&
(lp.end.index > lp.start.index))
{
decrement_mark (&lp.end);
lp.displayable_chars -= 1;
+
+ mb_len_2 = wctomb (mb, GTK_STEXT_INDEX (text, lp.end.index));
+ /* multibyte chars are always breakable */
+ if (mb_len_1 > 1 ||
+ (mb_len_1 == 1 && mb_len_2 > 1))
+ break;
+ mb_len_1 = mb_len_2;
}
}
else
pixels_remaining -= running_offset;
space_width = MARK_CURRENT_TEXT_FONT(text, &mark)->char_widths[' '];
-
- spaces_avail = pixels_remaining / space_width;
- spaces_avail = MIN (spaces_avail, tab_mark.to_next_tab);
+ if (space_width > 0) {
+ spaces_avail = pixels_remaining / space_width;
+ spaces_avail = MIN (spaces_avail, tab_mark.to_next_tab);
+ } else {
+ spaces_avail = 0;
+ }
draw_bg_rect (text, &mark, running_offset, pixel_start_height,
spaces_avail * space_width, LINE_HEIGHT (*lp), TRUE);