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