Ticket #3195: 2_goto_line.patch
File 2_goto_line.patch, 1.5 KB (added by aurel, 10 years ago) |
---|
-
src/editor/editcmd.c
old new edit_goto_cmd (WEdit * edit) 2954 2954 { 2955 2955 char *f; 2956 2956 static long line = 0; /* line as typed, saved as default */ 2957 static unsigned long column = 0; 2957 2958 long l; 2958 char *error; 2959 char s[32]; 2959 char s[65]; 2960 2961 if (column) 2962 g_snprintf (s, sizeof (s), "%ld:%lu", line, column); 2963 else 2964 g_snprintf (s, sizeof (s), "%ld", line); 2960 2965 2961 g_snprintf (s, sizeof (s), "%ld", line);2962 2966 f = input_dialog (_("Goto line"), _("Enter line:"), MC_HISTORY_EDIT_GOTO_LINE, line ? s : "", 2963 2967 INPUT_COMPLETE_NONE); 2964 2968 if (!f) … … edit_goto_cmd (WEdit * edit) 2970 2974 return; 2971 2975 } 2972 2976 2973 l = strtol (f, &error, 0);2974 if ( *error)2977 int scanned = sscanf(f, "%ld%*c%lu", &l, &column); 2978 if (!(scanned >= 1) || EOF == scanned) 2975 2979 { 2976 2980 g_free (f); 2977 2981 return; … … edit_goto_cmd (WEdit * edit) 2982 2986 l = edit->buffer.lines + l + 2; 2983 2987 edit_move_display (edit, l - WIDGET (edit)->lines / 2 - 1); 2984 2988 edit_move_to_line (edit, l - 1); 2989 2990 if (scanned == 2) 2991 { 2992 off_t line_width = edit_buffer_get_current_eol (&edit->buffer) - 2993 edit_buffer_get_current_bol (&edit->buffer); 2994 if (column > line_width) 2995 column = line_width; 2996 edit_cursor_move (edit, column - edit_get_col (edit)); 2997 } 2998 else 2999 column = 0; 3000 2985 3001 edit->force |= REDRAW_COMPLETELY; 2986 3002 g_free (f); 2987 3003 }