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