2006-09-06 [wwp] 2.4.0cvs154
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <glib.h>
27 #include <glib/gi18n.h>
28 #include <gtk/gtk.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <errno.h>
37
38 #include "main.h"
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "prefs_folder_column.h"
44 #include "mainwindow.h"
45 #include "summaryview.h"
46 #include "folderview.h"
47 #include "messageview.h"
48 #include "manage_window.h"
49 #include "inc.h"
50 #include "menu.h"
51 #include "codeconv.h"
52 #include "utils.h"
53 #include "gtkutils.h"
54 #include "alertpanel.h"
55 #include "folder.h"
56 #include "socket.h"
57 #include "filesel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
62
63 enum {
64         DATEFMT_FMT,
65         DATEFMT_TXT,
66         N_DATEFMT_COLUMNS
67 };
68
69 PrefsCommon prefs_common;
70
71 GtkWidget *notebook;
72
73 #ifdef G_OS_WIN32
74 /*
75  * In the Windows version prefs_common contains
76  *   - the non-OS-specific settings of the "Common" section and
77  *   - the OS-specific settings of the "CommonWin32" section
78  * The OS-specific settings of the "Common" section are not used
79  * but saved in prefs_unix.
80  */
81
82 #  define SPECIFIC_PREFS prefs_unix
83
84 static PrefsCommon prefs_unix;
85
86 static PrefParam param_os_specific[] = {
87         /* Receive */
88         {"ext_inc_path", "",
89          &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
90         {"newmail_notify_cmd", "",
91          &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
92
93         /* new fonts */
94         {"widget_font_gtk2",    NULL,
95           &prefs_common.widgetfont,             P_STRING, NULL, NULL, NULL},
96         {"message_font_gtk2",   "Monospace 9",
97          &prefs_common.textfont,                P_STRING, NULL, NULL, NULL},
98         {"print_font_gtk2",     "Monospace 9"
99          &prefs_common.printfont
100         {"small_font_gtk2",     "Sans 9",
101           &prefs_common.smallfont,              P_STRING, NULL, NULL, NULL},
102         {"normal_font_gtk2",    "Sans 9",
103           &prefs_common.normalfont,             P_STRING, NULL, NULL, NULL},
104
105         /* Message */
106         {"attach_save_directory", NULL,
107          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
108         {"attach_load_directory", NULL,
109          &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
110
111         /* MIME viewer */
112         {"mime_textviewer", NULL,
113          &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
114         {"mime_open_command", "notepad '%s'",
115          &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
116
117         /* Interface */
118         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
119          &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
120
121         /* Other */
122         {"uri_open_command", NULL,
123          &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
124         {"print_command", "notepad /p %s",
125          &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
126         {"ext_editor_command", "notepad %s",
127          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
128
129         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
130 };
131 #else
132 #  define SPECIFIC_PREFS prefs_common
133 #endif
134
135 /*
136    parameter name, default value, pointer to the prefs variable, data type,
137    pointer to the widget pointer,
138    pointer to the function for data setting,
139    pointer to the function for widget setting
140  */
141
142 static PrefParam param[] = {
143         /* Receive */
144         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
145          NULL, NULL, NULL},
146         {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
147          NULL, NULL, NULL},
148
149         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
150          NULL, NULL, NULL},
151         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
152          NULL, NULL, NULL},
153         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
154          NULL, NULL, NULL},
155         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
156          P_BOOL, NULL, NULL, NULL},
157         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
158          P_BOOL, NULL, NULL, NULL},
159         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
160          P_BOOL, NULL, NULL, NULL},
161         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
162         P_BOOL, NULL, NULL, NULL},
163         {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
164          NULL, NULL, NULL},
165         {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
166          NULL, NULL, NULL},
167         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
168          P_BOOL, NULL, NULL, NULL},
169         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
170          P_BOOL, NULL, NULL, NULL},
171  
172         /* Send */
173         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
174          NULL, NULL, NULL},
175         {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
176          P_BOOL, NULL, NULL, NULL},
177         {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
178          NULL, NULL, NULL},
179
180         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
181          NULL, NULL, NULL},
182         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
183          NULL, NULL, NULL},
184
185         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
186          P_BOOL, NULL, NULL, NULL},
187
188         /* Compose */
189         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
190          NULL, NULL, NULL},
191         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
192          P_BOOL, NULL, NULL, NULL},
193         {"redirect_keep_from", "FALSE",
194          &prefs_common.redirect_keep_from, P_BOOL,
195          NULL, NULL, NULL},
196         {"undo_level", "50", &prefs_common.undolevels, P_INT,
197          NULL, NULL, NULL},
198
199         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
200          NULL, NULL, NULL},
201         {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
202          NULL, NULL, NULL},
203         {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
204          NULL, NULL, NULL},
205         {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
206          NULL, NULL, NULL},
207         {"autosave", "TRUE", &prefs_common.autosave,
208          P_BOOL, NULL, NULL, NULL},
209         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
210          NULL, NULL, NULL},
211 #if USE_ASPELL
212         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
213          NULL, NULL, NULL},
214         {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
215          NULL, NULL, NULL},
216         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
217          NULL, NULL, NULL},
218         {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
219          NULL, NULL, NULL},
220         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
221          NULL, NULL, NULL},
222         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
223          NULL, NULL, NULL},
224         {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
225          P_BOOL, NULL, NULL, NULL},
226         {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
227          NULL, NULL, NULL},
228 #endif
229         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
230          NULL, NULL, NULL},
231         {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
232          NULL, NULL, NULL},
233
234         /* Account autoselection */
235         {"reply_account_autoselect", "TRUE",
236          &prefs_common.reply_account_autosel, P_BOOL,
237          NULL, NULL, NULL},
238         {"forward_account_autoselect", "TRUE",
239          &prefs_common.forward_account_autosel, P_BOOL,
240          NULL, NULL, NULL},
241         {"reedit_account_autoselect", "TRUE",
242          &prefs_common.reedit_account_autosel, P_BOOL,
243          NULL, NULL, NULL},
244
245         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
246          NULL, NULL, NULL},
247
248         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
249          NULL, NULL, NULL},
250
251         /* Quote */
252         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
253          NULL, NULL, NULL},
254         {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
255          &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
256
257         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
258          NULL, NULL, NULL},
259         {"forward_quote_format",
260          N_("\\n\\nBegin forwarded message:\\n\\n"
261          "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
262          "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
263          &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
264         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
265          NULL, NULL, NULL},
266
267         /* Display */
268         /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
269         {"widget_font",         NULL,
270           &prefs_common.widgetfont_gtk1,        P_STRING, NULL, NULL, NULL},
271         {"message_font",        "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
272          &prefs_common.textfont_gtk1,           P_STRING, NULL, NULL, NULL},
273         {"small_font",          "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
274           &prefs_common.smallfont_gtk1,         P_STRING, NULL, NULL, NULL},
275         {"bold_font",           "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
276           &prefs_common.boldfont_gtk1,          P_STRING, NULL, NULL, NULL},
277         {"normal_font",         "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
278           &prefs_common.normalfont_gtk1,        P_STRING, NULL, NULL, NULL},
279
280         /* new fonts */
281         {"widget_font_gtk2",    NULL,
282           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
283         {"message_font_gtk2",   "Monospace 9",
284          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
285         {"print_font_gtk2",     "Monospace 9",
286          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
287         {"small_font_gtk2",     "Sans 9",
288           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
289         {"normal_font_gtk2",    "Sans 9",
290           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
291
292         /* custom colors */
293         {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
294          NULL, NULL, NULL},
295         {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
296          NULL, NULL, NULL},
297         {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
298          NULL, NULL, NULL},
299         {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
300          NULL, NULL, NULL},
301         {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
302          NULL, NULL, NULL},
303         {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
304          NULL, NULL, NULL},
305         {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
306          NULL, NULL, NULL},
307         {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
308          NULL, NULL, NULL},
309         {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
310          NULL, NULL, NULL},
311         {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
312          NULL, NULL, NULL},
313         {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
314          NULL, NULL, NULL},
315         {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
316          NULL, NULL, NULL},
317         {"custom_color7", "#663366", &prefs_common.custom_colorlabel[6].color, P_COLOR,
318          NULL, NULL, NULL},
319         {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
320          NULL, NULL, NULL},
321
322         /* image viewer */
323         {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
324          NULL, NULL, NULL},
325         {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
326          NULL, NULL, NULL},
327         {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
328          NULL, NULL, NULL},
329
330         {"display_folder_unread_num", "FALSE",
331          &prefs_common.display_folder_unread, P_BOOL,
332          NULL, NULL, NULL},
333         {"newsgroup_abbrev_len", "16",
334          &prefs_common.ng_abbrev_len, P_INT,
335          NULL, NULL, NULL},
336
337         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
338          NULL, NULL, NULL},
339
340         /* Display: Summary View */
341         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
342          NULL, NULL, NULL},
343         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
344          NULL, NULL, NULL},
345         {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
346          P_STRING, NULL, NULL, NULL},
347
348         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
349          NULL, NULL, NULL},
350
351         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
352          NULL, NULL, NULL},
353         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
354          NULL, NULL, NULL},
355         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
356          NULL, NULL, NULL},
357         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
358          NULL, NULL, NULL},
359         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
360          NULL, NULL, NULL},
361
362
363         {"summary_col_show_mark", "TRUE",
364          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
365         {"summary_col_show_unread", "TRUE",
366          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
367         {"summary_col_show_mime", "TRUE",
368          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
369         {"summary_col_show_subject", "TRUE",
370          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
371         {"summary_col_show_from", "TRUE",
372          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
373         {"summary_col_show_to", "FALSE",
374          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
375         {"summary_col_show_date", "TRUE",
376          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
377         {"summary_col_show_size", "TRUE",
378          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
379         {"summary_col_show_number", "FALSE",
380          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
381         {"summary_col_show_score", "FALSE",
382          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
383         {"summary_col_show_locked", "FALSE",
384          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
385
386         {"summary_col_pos_mark", "0",
387           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
388         {"summary_col_pos_unread", "1",
389           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
390         {"summary_col_pos_mime", "2",
391           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
392         {"summary_col_pos_subject", "3",
393           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
394         {"summary_col_pos_from", "4",
395           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
396         {"summary_col_pos_date", "5",
397           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
398         {"summary_col_pos_size", "6",
399           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
400         {"summary_col_pos_number", "7",
401           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
402         {"summary_col_pos_score", "8",
403          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
404         {"summary_col_pos_locked", "9",
405          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
406         {"summary_col_pos_to", "10",
407           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
408
409         {"summary_col_size_mark", "10",
410          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
411         {"summary_col_size_unread", "13",
412          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
413         {"summary_col_size_mime", "10",
414          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
415         {"summary_col_size_subject", "200",
416          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
417         {"summary_col_size_from", "120",
418          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
419         {"summary_col_size_to", "120",
420          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
421         {"summary_col_size_date", "118",
422          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
423         {"summary_col_size_size", "45",
424          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
425         {"summary_col_size_number", "40",
426          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
427         {"summary_col_size_score", "40",
428          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
429         {"summary_col_size_locked", "13",
430          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
431
432         /* Widget size */
433         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
434          NULL, NULL, NULL},
435         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
436          NULL, NULL, NULL},
437         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
438          NULL, NULL, NULL},
439         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
440          NULL, NULL, NULL},
441         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
442          NULL, NULL, NULL},
443
444         {"folder_col_show_folder", "TRUE",
445          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
446         {"folder_col_show_new", "TRUE",
447          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
448         {"folder_col_show_unread", "TRUE",
449          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
450         {"folder_col_show_total", "TRUE",
451          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
452
453         {"folder_col_pos_folder", "0",
454          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
455         {"folder_col_pos_new", "1",
456          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
457         {"folder_col_pos_unread", "2",
458          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
459         {"folder_col_pos_total", "3",
460          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
461
462         {"folder_col_size_folder", "120",
463          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
464         {"folder_col_size_new", "32",
465          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
466         {"folder_col_size_unread", "32",
467          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
468         {"folder_col_size_total", "32",
469          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
470
471         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
472          NULL, NULL, NULL},
473         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
474          NULL, NULL, NULL},
475
476         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
477          NULL, NULL, NULL},
478         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
479          NULL, NULL, NULL},
480         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
481          NULL, NULL, NULL},
482         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
483          NULL, NULL, NULL},
484         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
485          NULL, NULL, NULL},
486
487         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
488          NULL, NULL, NULL},
489         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
490          NULL, NULL, NULL},
491         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
492          NULL, NULL, NULL},
493         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
494          NULL, NULL, NULL},
495         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
496          NULL, NULL, NULL},
497         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
498          NULL, NULL, NULL},
499         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
500          NULL, NULL, NULL},
501         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
502          NULL, NULL, NULL},
503         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
504          NULL, NULL, NULL},
505         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
506          NULL, NULL, NULL},
507         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
508          NULL, NULL, NULL},
509         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
510          NULL, NULL, NULL},
511         {"compose_width", "600", &prefs_common.compose_width, P_INT,
512          NULL, NULL, NULL},
513         {"compose_height", "560", &prefs_common.compose_height, P_INT,
514          NULL, NULL, NULL},
515         {"compose_x", "0", &prefs_common.compose_x, P_INT,
516          NULL, NULL, NULL},
517         {"compose_y", "0", &prefs_common.compose_y, P_INT,
518          NULL, NULL, NULL},
519         /* Message */
520         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
521          NULL, NULL, NULL},
522
523         {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
524          NULL, NULL, NULL},
525         {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
526          NULL, NULL, NULL},
527         {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
528          NULL, NULL, NULL},
529         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
530          NULL, NULL, NULL},
531         {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
532          NULL, NULL, NULL},
533         {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
534          NULL, NULL, NULL},
535         {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
536          NULL, NULL, NULL},
537         {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
538          NULL, NULL, NULL},
539         {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
540          NULL, NULL, NULL},
541         {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
542          NULL, NULL, NULL},
543         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
544          P_BOOL, NULL, NULL, NULL},
545
546         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
547          P_BOOL, NULL, NULL, NULL},
548         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
549          NULL, NULL, NULL},
550         {"display_xface", "TRUE", &prefs_common.display_xface,
551          P_BOOL, NULL, NULL, NULL},
552         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
553          NULL, NULL, NULL},
554         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
555          NULL, NULL, NULL},
556         {"line_space", "2", &prefs_common.line_space, P_INT,
557          NULL, NULL, NULL},
558         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
559          NULL, NULL, NULL},
560
561         {"enable_smooth_scroll", "FALSE",
562          &prefs_common.enable_smooth_scroll, P_BOOL,
563          NULL, NULL, NULL},
564         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
565          NULL, NULL, NULL},
566         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
567          NULL, NULL, NULL},
568
569         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
570          NULL, NULL, NULL},
571
572         {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
573          NULL, NULL, NULL},
574
575         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
576          NULL, NULL, NULL},
577         {"attach_save_directory", NULL,
578          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
579         {"attach_load_directory", NULL,
580          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
581
582         /* MIME viewer */
583         {"mime_textviewer",   NULL,
584          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
585         {"mime_open_command", "gedit '%s'",
586          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
587
588         /* Interface */
589         {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
590          NULL, NULL, NULL},
591         {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
592          NULL, NULL, NULL},
593
594         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
595          NULL, NULL, NULL}, */
596         {"always_show_message_when_selected", "FALSE",
597          &prefs_common.always_show_msg,
598          P_BOOL, NULL, NULL, NULL},
599         {"select_on_entry", "2", &prefs_common.select_on_entry,
600          P_ENUM, NULL, NULL, NULL},
601         {"mark_as_read_on_new_window", "FALSE",
602          &prefs_common.mark_as_read_on_new_window,
603          P_BOOL, NULL, NULL, NULL},
604         {"mark_as_read_delay", "0",
605          &prefs_common.mark_as_read_delay, P_INT, 
606          NULL, NULL, NULL},
607         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
608          NULL, NULL, NULL},
609         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
610          NULL, NULL, NULL},
611
612         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
613          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
614          NULL, NULL, NULL},
615
616         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
617          NULL, NULL, NULL},
618
619         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
620          NULL, NULL, NULL},
621         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
622          NULL, NULL, NULL},
623
624         /* Other */
625         {"uri_open_command", DEFAULT_BROWSER_CMD,
626          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
627         {"print_command", "lpr %s",
628          &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
629         {"ext_editor_command", DEFAULT_EDITOR_CMD,
630          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
631
632         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
633          P_BOOL, NULL, NULL, NULL},
634         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
635          NULL, NULL, NULL},
636         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
637          NULL, NULL, NULL},
638         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
639          NULL, NULL, NULL},
640         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
641          P_BOOL, NULL, NULL, NULL},
642         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
643          NULL, NULL, NULL},
644         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
645          NULL, NULL, NULL},
646         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
647          NULL, NULL, NULL},
648
649         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
650          P_INT, NULL, NULL, NULL},
651         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
652          NULL, NULL, NULL},
653         {"important_score", "1", &prefs_common.important_score, P_INT,
654          NULL, NULL, NULL},
655         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
656          NULL, NULL, NULL},
657         {"log_length", "500", &prefs_common.loglength, P_INT,
658          NULL, NULL, NULL},
659         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
660          NULL, NULL, NULL},
661         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
662          NULL, NULL, NULL},
663         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
664          NULL, NULL, NULL},
665         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
666          NULL, NULL, NULL},
667         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
668          NULL, NULL, NULL},
669
670         {"color_new", "179", &prefs_common.color_new, P_COLOR,
671          NULL, NULL, NULL},
672
673         /* Some windows' sizes */
674         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
675          NULL, NULL, NULL},
676         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
677          NULL, NULL, NULL},
678
679         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
680          NULL, NULL, NULL},
681         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
682          NULL, NULL, NULL},
683
684         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
685          NULL, NULL, NULL},
686         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
687          NULL, NULL, NULL},
688
689         {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
690          NULL, NULL, NULL},
691         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
692          NULL, NULL, NULL},
693
694         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
695          NULL, NULL, NULL},
696         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
697          NULL, NULL, NULL},
698
699         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
700          NULL, NULL, NULL},
701         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
702          NULL, NULL, NULL},
703
704         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
705          NULL, NULL, NULL},
706         {"addressbookeditpersonwin_height", "-1", &prefs_common.addressbookeditpersonwin_height, P_INT,
707          NULL, NULL, NULL},
708
709         {"pluginswin_width", "480", &prefs_common.pluginswin_width, P_INT,
710          NULL, NULL, NULL},
711         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
712          NULL, NULL, NULL},
713
714         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
715          NULL, NULL, NULL},
716         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
717          NULL, NULL, NULL},
718
719         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
720          NULL, NULL, NULL},
721         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
722          NULL, NULL, NULL},
723
724         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
725          NULL, NULL, NULL},
726         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
727          NULL, NULL, NULL},
728
729         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
730          NULL, NULL, NULL},
731         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
732          NULL, NULL, NULL},
733
734         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
735          NULL, NULL, NULL},
736         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
737          NULL, NULL, NULL},
738
739         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
740          NULL, NULL, NULL},
741         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
742          NULL, NULL, NULL},
743
744         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
745          NULL, NULL, NULL},
746         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
747          NULL, NULL, NULL},
748
749         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
750          NULL, NULL, NULL},
751         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
752          NULL, NULL, NULL},
753
754         /* Hidden */
755         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
756          NULL, NULL, NULL},
757         {"utf8_instead_of_locale_for_broken_mail", "0", 
758          &prefs_common.broken_are_utf8, P_INT,
759          NULL, NULL, NULL},
760         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
761          NULL, NULL, NULL},
762         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
763          NULL, NULL, NULL},
764         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
765          NULL, NULL, NULL},
766         {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
767          NULL, NULL, NULL},
768         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
769          NULL, NULL, NULL},
770         {"folderview_vscrollbar_policy", "0",
771          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
772          NULL, NULL, NULL},
773         {"textview_cursor_visible", "FALSE",
774          &prefs_common.textview_cursor_visible, P_BOOL,
775          NULL, NULL, NULL},
776         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
777          NULL, NULL, NULL},
778         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
779          NULL, NULL, NULL},
780         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
781          NULL, NULL, NULL},
782         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
783         P_INT, NULL, NULL, NULL },
784         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
785          NULL, NULL, NULL},
786         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
787          NULL, NULL, NULL},
788         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
789          NULL, NULL, NULL},
790         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
791          NULL, NULL, NULL},
792         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
793          NULL, NULL, NULL},
794         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
795          NULL, NULL, NULL},
796
797         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
798 };
799
800 PrefsCommon *prefs_common_get(void)
801 {
802         return &prefs_common;
803 }
804
805 /*
806  * Read history list from the specified history file
807  */
808 GList *prefs_common_read_history(const gchar *history) 
809 {
810         FILE *fp;
811         gchar *path;
812         gchar buf[PREFSBUFSIZE];
813         GList *tmp = NULL;
814
815         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
816                            NULL);
817         if ((fp = g_fopen(path, "rb")) == NULL) {
818                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
819                 g_free(path);
820                 return NULL;
821         }
822         g_free(path);
823         while (fgets(buf, sizeof(buf), fp) != NULL) {
824                 g_strstrip(buf);
825                 if (buf[0] == '\0') continue;
826                 tmp = add_history(tmp, buf);
827         }
828         fclose(fp);
829
830         tmp = g_list_reverse(tmp);
831
832         return tmp;
833 }
834
835 void prefs_common_read_config(void)
836 {
837         gchar *rcpath;
838         gchar *tmp;
839
840         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
841         prefs_read_config(param, "Common", rcpath, NULL);
842 #ifdef G_OS_WIN32
843         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
844 #endif
845
846         g_free(rcpath);
847
848         tmp = g_strdup(gettext(prefs_common.quotefmt));
849         g_free(prefs_common.quotefmt);
850         prefs_common.quotefmt = tmp;
851
852         tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
853         g_free(prefs_common.fw_quotefmt);
854         prefs_common.fw_quotefmt = tmp;
855         
856         tmp = g_strdup(gettext(prefs_common.date_format));
857         g_free(prefs_common.date_format);
858         prefs_common.date_format = tmp;
859
860         prefs_common.mime_open_cmd_history =
861                 prefs_common_read_history(COMMAND_HISTORY);
862         prefs_common.summary_quicksearch_history =
863                 prefs_common_read_history(QUICKSEARCH_HISTORY);
864
865         colorlabel_update_colortable_from_prefs();
866 }
867
868 /*
869  * Save history list to the specified history file
870  */
871 void prefs_common_save_history(const gchar *history, GList *list)
872 {
873         GList *cur;
874         FILE *fp;
875         gchar *path;
876
877         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
878                            NULL);
879         if ((fp = g_fopen(path, "wb")) == NULL) {
880                 FILE_OP_ERROR(path, "fopen");
881                 g_free(path);
882                 return;
883         }
884
885         for (cur = list; cur != NULL; cur = cur->next) {
886                 fputs((gchar *)cur->data, fp);
887                 fputc('\n', fp);
888         }
889
890         fclose(fp);
891         g_free(path);
892 }
893
894 void prefs_common_write_config(void)
895 {
896         prefs_write_config(param, "Common", COMMON_RC);
897 #ifdef G_OS_WIN32
898         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
899 #endif
900
901         prefs_common_save_history(COMMAND_HISTORY, 
902                 prefs_common.mime_open_cmd_history);
903         prefs_common_save_history(QUICKSEARCH_HISTORY, 
904                 prefs_common.summary_quicksearch_history);
905 }
906
907 void pref_set_textview_from_pref(GtkTextView *textview, gchar *txt)
908 {
909         GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
910         gchar *o_out, *out = malloc(txt?(strlen(txt)+1):1);
911         gchar *t = txt;
912         memset(out, 0, strlen(txt)+1);
913         o_out = out;
914         while (*t != '\0') {
915                 if (*t == '\\' && *(t+1) == 'n') {
916                         *out++ = '\n';
917                         t++;
918                 } else if (*t == '\\') {
919                         t++;
920                 } else {
921                         *out++ = *t;
922                 }
923                 t++;
924         }
925         *out='\0';
926
927         gtk_text_buffer_set_text(buffer, o_out?o_out:"", -1);
928         g_free(o_out);
929 }
930
931 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
932 {
933         GtkTextBuffer *buffer;
934         GtkTextIter start, end;
935         gchar *o_out, *out, *tmp, *t;
936         
937         buffer = gtk_text_view_get_buffer(textview);
938         gtk_text_buffer_get_start_iter(buffer, &start);
939         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
940         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
941         t = tmp;
942         o_out = out = malloc(2*strlen(tmp)+1);
943         
944         while (*t != '\0') {
945                 if (*t == '\n') {
946                         *out++ = '\\';
947                         *out++ = 'n';
948                 } else if (*t == '\\') {
949                         *out++ = '\\';
950                         *out++ = '\\';
951                 } else {
952                         *out++ = *t;
953                 }
954                 t++;
955         }
956         *out = '\0';
957         g_free(tmp);
958
959         return o_out;
960 }