2007-03-21 [colin] 2.8.1cvs32
[claws.git] / src / prefs_common.c
1 /*
2  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail 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         /* Message */
105         {"attach_save_directory", NULL,
106          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
107         {"attach_load_directory", NULL,
108          &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
109
110         /* MIME viewer */
111         {"mime_textviewer", NULL,
112          &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
113         {"mime_open_command", "notepad '%s'",
114          &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
115
116         /* Interface */
117         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
118          &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
119
120         /* Other */
121         {"uri_open_command", NULL,
122          &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
123         {"print_command", "notepad /p %s",
124          &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
125         {"ext_editor_command", "notepad %s",
126          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
127
128         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
129 };
130 #else
131 #  define SPECIFIC_PREFS prefs_common
132 #endif
133
134 /*
135    parameter name, default value, pointer to the prefs variable, data type,
136    pointer to the widget pointer,
137    pointer to the function for data setting,
138    pointer to the function for widget setting
139  */
140
141 static PrefParam param[] = {
142         /* Receive */
143         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
144          NULL, NULL, NULL},
145         {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
146          NULL, NULL, NULL},
147
148         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
149          NULL, NULL, NULL},
150         {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
151          NULL, NULL, NULL},
152         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
153          NULL, NULL, NULL},
154         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
155          P_BOOL, NULL, NULL, NULL},
156         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
157          P_BOOL, NULL, NULL, NULL},
158         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
159          P_BOOL, NULL, NULL, NULL},
160         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
161         P_BOOL, NULL, NULL, NULL},
162         {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
163          NULL, NULL, NULL},
164         {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
165          NULL, NULL, NULL},
166         {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
167          NULL, NULL, NULL},
168         {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
169          NULL, NULL, NULL},
170         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
171          P_BOOL, NULL, NULL, NULL},
172         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
173          P_BOOL, NULL, NULL, NULL},
174  
175         /* Send */
176         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
177          NULL, NULL, NULL},
178         {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
179          P_BOOL, NULL, NULL, NULL},
180         {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
181          NULL, NULL, NULL},
182         {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
183          NULL, NULL, NULL},
184         {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
185          NULL, NULL, NULL},
186
187         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
188          NULL, NULL, NULL},
189         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
190          NULL, NULL, NULL},
191
192         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
193          P_BOOL, NULL, NULL, NULL},
194
195         /* Compose */
196         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
197          NULL, NULL, NULL},
198         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
199          P_BOOL, NULL, NULL, NULL},
200         {"redirect_keep_from", "FALSE",
201          &prefs_common.redirect_keep_from, P_BOOL,
202          NULL, NULL, NULL},
203         {"undo_level", "50", &prefs_common.undolevels, P_INT,
204          NULL, NULL, NULL},
205         {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
206          NULL, NULL, NULL},
207         {"compose_subject_format", "",
208          &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
209         {"compose_body_format", N_("Hello,\\n"),
210          &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
211
212         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
213          NULL, NULL, NULL},
214         {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
215          NULL, NULL, NULL},
216         {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
217          NULL, NULL, NULL},
218         {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
219          NULL, NULL, NULL},
220         {"autosave", "TRUE", &prefs_common.autosave,
221          P_BOOL, NULL, NULL, NULL},
222         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
223          NULL, NULL, NULL},
224 #if USE_ASPELL
225         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
226          NULL, NULL, NULL},
227         {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
228          NULL, NULL, NULL},
229         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
230          NULL, NULL, NULL},
231         {"alt_dictionary",  "", &prefs_common.alt_dictionary, P_STRING,
232          NULL, NULL, NULL},
233         {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
234          NULL, NULL, NULL},
235         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
236          NULL, NULL, NULL},
237         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
238          NULL, NULL, NULL},
239         {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
240          P_BOOL, NULL, NULL, NULL},
241         {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
242          NULL, NULL, NULL},
243         {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
244          NULL, NULL, NULL},
245 #endif
246         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
247          NULL, NULL, NULL},
248         {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
249          NULL, NULL, NULL},
250
251         /* Account autoselection */
252         {"reply_account_autoselect", "TRUE",
253          &prefs_common.reply_account_autosel, P_BOOL,
254          NULL, NULL, NULL},
255         {"forward_account_autoselect", "TRUE",
256          &prefs_common.forward_account_autosel, P_BOOL,
257          NULL, NULL, NULL},
258         {"reedit_account_autoselect", "TRUE",
259          &prefs_common.reedit_account_autosel, P_BOOL,
260          NULL, NULL, NULL},
261
262         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
263          NULL, NULL, NULL},
264
265         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
266          NULL, NULL, NULL},
267
268         /* Quote */
269         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
270          NULL, NULL, NULL},
271         {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
272          &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
273
274         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
275          NULL, NULL, NULL},
276         {"forward_quote_format",
277          N_("\\n\\nBegin forwarded message:\\n\\n"
278          "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
279          "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
280          &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
281         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
282          NULL, NULL, NULL},
283
284         /* Display */
285         /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
286         {"widget_font",         NULL,
287           &prefs_common.widgetfont_gtk1,        P_STRING, NULL, NULL, NULL},
288         {"message_font",        "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
289          &prefs_common.textfont_gtk1,           P_STRING, NULL, NULL, NULL},
290         {"small_font",          "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
291           &prefs_common.smallfont_gtk1,         P_STRING, NULL, NULL, NULL},
292         {"bold_font",           "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
293           &prefs_common.boldfont_gtk1,          P_STRING, NULL, NULL, NULL},
294         {"normal_font",         "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
295           &prefs_common.normalfont_gtk1,        P_STRING, NULL, NULL, NULL},
296
297         /* new fonts */
298 #ifndef MAEMO
299         {"widget_font_gtk2",    NULL,
300           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
301         {"message_font_gtk2",   "Monospace 9",
302          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
303         {"print_font_gtk2",     "Monospace 9",
304          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
305         {"small_font_gtk2",     "Sans 9",
306           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
307         {"normal_font_gtk2",    "Sans 9",
308           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
309 #else
310         {"widget_font_gtk2",    NULL,
311           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
312         {"message_font_gtk2",   "Monospace 8",
313          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
314         {"print_font_gtk2",     "Monospace 8",
315          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
316         {"small_font_gtk2",     "Sans 8",
317           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
318         {"normal_font_gtk2",    "Sans 8",
319           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
320 #endif
321         /* custom colors */
322         {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
323          NULL, NULL, NULL},
324         {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
325          NULL, NULL, NULL},
326         {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
327          NULL, NULL, NULL},
328         {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
329          NULL, NULL, NULL},
330         {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
331          NULL, NULL, NULL},
332         {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
333          NULL, NULL, NULL},
334         {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
335          NULL, NULL, NULL},
336         {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
337          NULL, NULL, NULL},
338         {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
339          NULL, NULL, NULL},
340         {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
341          NULL, NULL, NULL},
342         {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
343          NULL, NULL, NULL},
344         {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
345          NULL, NULL, NULL},
346         {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
347          NULL, NULL, NULL},
348         {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
349          NULL, NULL, NULL},
350         {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
351          NULL, NULL, NULL},
352         {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
353          NULL, NULL, NULL},
354         {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
355          NULL, NULL, NULL},
356         {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
357          NULL, NULL, NULL},
358         {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
359          NULL, NULL, NULL},
360         {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
361          NULL, NULL, NULL},
362         {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
363          NULL, NULL, NULL},
364         {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
365          NULL, NULL, NULL},
366         {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
367          NULL, NULL, NULL},
368         {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
369          NULL, NULL, NULL},
370         {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
371          NULL, NULL, NULL},
372         {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
373          NULL, NULL, NULL},
374         {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
375          NULL, NULL, NULL},
376         {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
377          NULL, NULL, NULL},
378         {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
379          NULL, NULL, NULL},
380         {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
381          NULL, NULL, NULL},
382
383         /* image viewer */
384         {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
385          NULL, NULL, NULL},
386         {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
387          NULL, NULL, NULL},
388         {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
389          NULL, NULL, NULL},
390
391         {"display_folder_unread_num", "0",
392          &prefs_common.display_folder_unread, P_INT,
393          NULL, NULL, NULL},
394         {"newsgroup_abbrev_len", "16",
395          &prefs_common.ng_abbrev_len, P_INT,
396          NULL, NULL, NULL},
397
398         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
399          NULL, NULL, NULL},
400
401         /* Display: Summary View */
402         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
403          NULL, NULL, NULL},
404         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
405          NULL, NULL, NULL},
406         {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
407          P_STRING, NULL, NULL, NULL},
408
409         {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
410          NULL, NULL, NULL},
411
412         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
413          NULL, NULL, NULL},
414 #ifndef MAEMO
415         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
416          NULL, NULL, NULL},
417 #else
418         {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
419          NULL, NULL, NULL},
420 #endif
421         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
422          NULL, NULL, NULL},
423         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
424          NULL, NULL, NULL},
425 #ifndef MAEMO
426         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
427          NULL, NULL, NULL},
428 #else
429         {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
430          NULL, NULL, NULL},
431 #endif
432
433         {"summary_col_show_mark", "TRUE",
434          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
435         {"summary_col_show_unread", "TRUE",
436          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
437         {"summary_col_show_subject", "TRUE",
438          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
439         {"summary_col_show_from", "TRUE",
440          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
441         {"summary_col_show_to", "FALSE",
442          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
443         {"summary_col_show_date", "TRUE",
444          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
445         {"summary_col_show_mime", "TRUE",
446          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
447         {"summary_col_show_size", "TRUE",
448          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
449         {"summary_col_show_number", "FALSE",
450          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
451         {"summary_col_show_score", "FALSE",
452          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
453         {"summary_col_show_locked", "FALSE",
454          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
455
456         {"summary_col_pos_mark", "0",
457           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
458         {"summary_col_pos_unread", "1",
459           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
460         {"summary_col_pos_mime", "2",
461           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
462         {"summary_col_pos_subject", "3",
463           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
464         {"summary_col_pos_from", "4",
465           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
466         {"summary_col_pos_date", "5",
467           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
468         {"summary_col_pos_size", "6",
469           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
470         {"summary_col_pos_number", "7",
471           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
472         {"summary_col_pos_score", "8",
473          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
474         {"summary_col_pos_locked", "9",
475          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
476         {"summary_col_pos_to", "10",
477           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
478
479         {"summary_col_size_mark", "10",
480          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
481         {"summary_col_size_unread", "13",
482          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
483         {"summary_col_size_mime", "10",
484          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
485 #ifndef MAEMO
486         {"summary_col_size_subject", "200",
487          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
488         {"summary_col_size_from", "120",
489          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
490         {"summary_col_size_to", "120",
491          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
492 #else
493         {"summary_col_size_subject", "300",
494          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
495         {"summary_col_size_from", "150",
496          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
497         {"summary_col_size_to", "150",
498          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
499
500 #endif
501         {"summary_col_size_date", "118",
502          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
503         {"summary_col_size_size", "45",
504          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
505         {"summary_col_size_number", "40",
506          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
507         {"summary_col_size_score", "40",
508          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
509         {"summary_col_size_locked", "13",
510          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
511
512         /* Widget size */
513         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
514          NULL, NULL, NULL},
515         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
516          NULL, NULL, NULL},
517         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
518          NULL, NULL, NULL},
519         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
520          NULL, NULL, NULL},
521         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
522          NULL, NULL, NULL},
523
524         {"folder_col_show_folder", "TRUE",
525          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
526         {"folder_col_show_new", "TRUE",
527          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
528         {"folder_col_show_unread", "TRUE",
529          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
530         {"folder_col_show_total", "TRUE",
531          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
532
533         {"folder_col_pos_folder", "0",
534          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
535         {"folder_col_pos_new", "1",
536          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
537         {"folder_col_pos_unread", "2",
538          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
539         {"folder_col_pos_total", "3",
540          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
541
542 #ifndef MAEMO
543         {"folder_col_size_folder", "120",
544          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
545         {"folder_col_size_new", "32",
546          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
547         {"folder_col_size_unread", "32",
548          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
549         {"folder_col_size_total", "32",
550          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
551 #else
552         {"folder_col_size_folder", "400",
553          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
554         {"folder_col_size_new", "32",
555          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
556         {"folder_col_size_unread", "32",
557          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
558         {"folder_col_size_total", "32",
559          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
560 #endif
561         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
562          NULL, NULL, NULL},
563         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
564          NULL, NULL, NULL},
565
566         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
567          NULL, NULL, NULL},
568         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
569          NULL, NULL, NULL},
570         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
571          NULL, NULL, NULL},
572         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
573          NULL, NULL, NULL},
574         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
575          NULL, NULL, NULL},
576
577         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
578          NULL, NULL, NULL},
579         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
580          NULL, NULL, NULL},
581         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
582          NULL, NULL, NULL},
583         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
584          NULL, NULL, NULL},
585         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
586          NULL, NULL, NULL},
587         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
588          NULL, NULL, NULL},
589 #ifndef MAEMO
590         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
591          NULL, NULL, NULL},
592         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
593          NULL, NULL, NULL},
594         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
595          NULL, NULL, NULL},
596         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
597          NULL, NULL, NULL},
598         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
599          NULL, NULL, NULL},
600         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
601          NULL, NULL, NULL},
602         {"compose_width", "600", &prefs_common.compose_width, P_INT,
603          NULL, NULL, NULL},
604         {"compose_height", "560", &prefs_common.compose_height, P_INT,
605          NULL, NULL, NULL},
606 #else
607         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
608          NULL, NULL, NULL},
609         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
610          NULL, NULL, NULL},
611         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
612          NULL, NULL, NULL},
613         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
614          NULL, NULL, NULL},
615         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
616          NULL, NULL, NULL},
617         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
618          NULL, NULL, NULL},
619         {"compose_width", "700", &prefs_common.compose_width, P_INT,
620          NULL, NULL, NULL},
621         {"compose_height", "470", &prefs_common.compose_height, P_INT,
622          NULL, NULL, NULL},
623 #endif
624         {"compose_x", "0", &prefs_common.compose_x, P_INT,
625          NULL, NULL, NULL},
626         {"compose_y", "0", &prefs_common.compose_y, P_INT,
627          NULL, NULL, NULL},
628         /* Message */
629         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
630          NULL, NULL, NULL},
631
632         {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
633          NULL, NULL, NULL},
634         {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
635          NULL, NULL, NULL},
636         {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
637          NULL, NULL, NULL},
638         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
639          NULL, NULL, NULL},
640         {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
641          NULL, NULL, NULL},
642         {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
643          NULL, NULL, NULL},
644         {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
645          NULL, NULL, NULL},
646         {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
647          NULL, NULL, NULL},
648         {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
649          NULL, NULL, NULL},
650         {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
651          NULL, NULL, NULL},
652         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
653          P_BOOL, NULL, NULL, NULL},
654
655         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
656          P_BOOL, NULL, NULL, NULL},
657         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
658          NULL, NULL, NULL},
659         {"display_xface", "TRUE", &prefs_common.display_xface,
660          P_BOOL, NULL, NULL, NULL},
661         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
662          NULL, NULL, NULL},
663         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
664          NULL, NULL, NULL},
665         {"line_space", "2", &prefs_common.line_space, P_INT,
666          NULL, NULL, NULL},
667         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
668          NULL, NULL, NULL},
669
670         {"enable_smooth_scroll", "FALSE",
671          &prefs_common.enable_smooth_scroll, P_BOOL,
672          NULL, NULL, NULL},
673         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
674          NULL, NULL, NULL},
675         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
676          NULL, NULL, NULL},
677         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
678          NULL, NULL, NULL},
679
680         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
681          NULL, NULL, NULL},
682
683         {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
684          NULL, NULL, NULL},
685
686         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
687          NULL, NULL, NULL},
688         {"attach_save_directory", NULL,
689          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
690         {"attach_load_directory", NULL,
691          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
692
693         /* MIME viewer */
694         {"mime_textviewer",   NULL,
695          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
696         {"mime_open_command", "gedit '%s'",
697          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
698
699         /* Interface */
700 #ifndef MAEMO
701         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
702          NULL, NULL, NULL},
703 #else
704         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
705          NULL, NULL, NULL},
706 #endif
707         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
708          NULL, NULL, NULL}, */
709         {"always_show_message_when_selected", "FALSE",
710          &prefs_common.always_show_msg,
711          P_BOOL, NULL, NULL, NULL},
712         {"select_on_entry", "2", &prefs_common.select_on_entry,
713          P_ENUM, NULL, NULL, NULL},
714         {"mark_as_read_on_new_window", "FALSE",
715          &prefs_common.mark_as_read_on_new_window,
716          P_BOOL, NULL, NULL, NULL},
717         {"mark_as_read_delay", "0",
718          &prefs_common.mark_as_read_delay, P_INT, 
719          NULL, NULL, NULL},
720         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
721          NULL, NULL, NULL},
722         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
723          NULL, NULL, NULL},
724
725         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
726          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
727          NULL, NULL, NULL},
728
729         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
730          NULL, NULL, NULL},
731
732         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
733          NULL, NULL, NULL},
734         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
735          NULL, NULL, NULL},
736
737         /* Addressbook */
738         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
739          P_BOOL, NULL, NULL, NULL},
740         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
741          P_INT, NULL, NULL, NULL},
742         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
743          P_INT, NULL, NULL, NULL},
744
745         /* Other */
746         {"uri_open_command", DEFAULT_BROWSER_CMD,
747          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
748         {"print_command", "lpr %s",
749          &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
750         {"ext_editor_command", DEFAULT_EDITOR_CMD,
751          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
752         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
753          P_BOOL, NULL, NULL, NULL},
754         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
755          NULL, NULL, NULL},
756         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
757          NULL, NULL, NULL},
758         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
759          NULL, NULL, NULL},
760         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
761          P_BOOL, NULL, NULL, NULL},
762         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
763          NULL, NULL, NULL},
764         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
765          NULL, NULL, NULL},
766 #ifndef MAEMO
767         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
768          NULL, NULL, NULL},
769 #else
770         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
771          NULL, NULL, NULL},
772 #endif
773
774         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
775          P_INT, NULL, NULL, NULL},
776         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
777          NULL, NULL, NULL},
778         {"important_score", "1", &prefs_common.important_score, P_INT,
779          NULL, NULL, NULL},
780
781     {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
782          NULL, NULL, NULL},
783         {"log_length", "500", &prefs_common.loglength, P_INT,
784          NULL, NULL, NULL},
785
786         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
787          NULL, NULL, NULL},
788         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
789          NULL, NULL, NULL},
790         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
791          NULL, NULL, NULL},
792         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
793          NULL, NULL, NULL},
794         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
795          NULL, NULL, NULL},
796         {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
797          NULL, NULL, NULL},
798         {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
799          NULL, NULL, NULL},
800         {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
801          NULL, NULL, NULL},
802
803     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
804          NULL, NULL, NULL},
805     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
806          NULL, NULL, NULL},
807     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
808          NULL, NULL, NULL},
809     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
810          NULL, NULL, NULL},
811     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
812          NULL, NULL, NULL},
813     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
814          NULL, NULL, NULL},
815     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
816          NULL, NULL, NULL},
817     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
818          NULL, NULL, NULL},
819         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
820          NULL, NULL, NULL},
821
822         {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
823          NULL, NULL, NULL},
824
825         {"color_new", "179", &prefs_common.color_new, P_COLOR,
826          NULL, NULL, NULL},
827
828         /* Some windows' sizes */
829         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
830          NULL, NULL, NULL},
831         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
832          NULL, NULL, NULL},
833
834         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
835          NULL, NULL, NULL},
836         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
837          NULL, NULL, NULL},
838
839         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
840          NULL, NULL, NULL},
841         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
842          NULL, NULL, NULL},
843
844         {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
845          NULL, NULL, NULL},
846         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
847          NULL, NULL, NULL},
848
849         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
850          NULL, NULL, NULL},
851         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
852          NULL, NULL, NULL},
853
854         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
855          NULL, NULL, NULL},
856         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
857          NULL, NULL, NULL},
858
859         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
860          NULL, NULL, NULL},
861         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
862          NULL, NULL, NULL},
863
864         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
865          NULL, NULL, NULL},
866         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
867          NULL, NULL, NULL},
868
869         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
870          NULL, NULL, NULL},
871         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
872          NULL, NULL, NULL},
873
874         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
875          NULL, NULL, NULL},
876         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
877          NULL, NULL, NULL},
878
879         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
880          NULL, NULL, NULL},
881         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
882          NULL, NULL, NULL},
883
884         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
885          NULL, NULL, NULL},
886         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
887          NULL, NULL, NULL},
888
889         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
890          NULL, NULL, NULL},
891         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
892          NULL, NULL, NULL},
893
894         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
895          NULL, NULL, NULL},
896         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
897          NULL, NULL, NULL},
898
899         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
900          NULL, NULL, NULL},
901         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
902          NULL, NULL, NULL},
903
904         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
905          NULL, NULL, NULL},
906         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
907          NULL, NULL, NULL},
908
909         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
910          NULL, NULL, NULL},
911         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
912          NULL, NULL, NULL},
913
914         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
915          NULL, NULL, NULL},
916         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
917          NULL, NULL, NULL},
918
919         /* Hidden */
920         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
921          NULL, NULL, NULL},
922         {"utf8_instead_of_locale_for_broken_mail", "0", 
923          &prefs_common.broken_are_utf8, P_INT,
924          NULL, NULL, NULL},
925         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
926          NULL, NULL, NULL},
927         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
928          NULL, NULL, NULL},
929         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
930          NULL, NULL, NULL},
931         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
932          NULL, NULL, NULL},
933         {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
934          NULL, NULL, NULL},
935         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
936          NULL, NULL, NULL},
937         {"folderview_vscrollbar_policy", "0",
938          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
939          NULL, NULL, NULL},
940         {"textview_cursor_visible", "FALSE",
941          &prefs_common.textview_cursor_visible, P_BOOL,
942          NULL, NULL, NULL},
943         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
944          NULL, NULL, NULL},
945         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
946          NULL, NULL, NULL},
947         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
948          NULL, NULL, NULL},
949         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
950         P_INT, NULL, NULL, NULL },
951         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
952          NULL, NULL, NULL},
953         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
954          NULL, NULL, NULL},
955         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
956          NULL, NULL, NULL},
957         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
958          NULL, NULL, NULL},
959         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
960          NULL, NULL, NULL},
961         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
962          NULL, NULL, NULL},
963         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
964          NULL, NULL, NULL},
965         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
966          NULL, NULL, NULL},
967
968         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
969 };
970
971 PrefsCommon *prefs_common_get(void)
972 {
973         return &prefs_common;
974 }
975
976 /*
977  * Read history list from the specified history file
978  */
979 static GList *prefs_common_read_history(const gchar *history) 
980 {
981         FILE *fp;
982         gchar *path;
983         gchar buf[PREFSBUFSIZE];
984         GList *tmp = NULL;
985
986         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
987                            NULL);
988         if ((fp = g_fopen(path, "rb")) == NULL) {
989                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
990                 g_free(path);
991                 return NULL;
992         }
993         g_free(path);
994         while (fgets(buf, sizeof(buf), fp) != NULL) {
995                 g_strstrip(buf);
996                 if (buf[0] == '\0') continue;
997                 tmp = add_history(tmp, buf);
998         }
999         fclose(fp);
1000
1001         tmp = g_list_reverse(tmp);
1002
1003         return tmp;
1004 }
1005
1006 void prefs_common_read_config(void)
1007 {
1008         gchar *rcpath;
1009         gchar *tmp;
1010
1011         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1012         prefs_read_config(param, "Common", rcpath, NULL);
1013 #ifdef G_OS_WIN32
1014         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1015 #endif
1016
1017         g_free(rcpath);
1018
1019         tmp = g_strdup(gettext(prefs_common.quotefmt));
1020         g_free(prefs_common.quotefmt);
1021         prefs_common.quotefmt = tmp;
1022
1023         tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1024         g_free(prefs_common.fw_quotefmt);
1025         prefs_common.fw_quotefmt = tmp;
1026         
1027         tmp = g_strdup(gettext(prefs_common.date_format));
1028         g_free(prefs_common.date_format);
1029         prefs_common.date_format = tmp;
1030
1031         tmp = g_strdup(gettext(prefs_common.compose_body_format));
1032         g_free(prefs_common.compose_body_format);
1033         prefs_common.compose_body_format = tmp;
1034
1035         prefs_common.mime_open_cmd_history =
1036                 prefs_common_read_history(COMMAND_HISTORY);
1037         prefs_common.summary_quicksearch_history =
1038                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1039         prefs_common.summary_search_from_history =
1040                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1041         prefs_common.summary_search_to_history =
1042                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1043         prefs_common.summary_search_subject_history =
1044                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1045         prefs_common.summary_search_body_history =
1046                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1047         prefs_common.summary_search_adv_condition_history =
1048                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1049         prefs_common.message_search_history =
1050                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1051
1052         colorlabel_update_colortable_from_prefs();
1053 }
1054
1055 /*
1056  * Save history list to the specified history file
1057  */
1058 static void prefs_common_save_history(const gchar *history, GList *list)
1059 {
1060         GList *cur;
1061         FILE *fp;
1062         gchar *path;
1063
1064         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1065                            NULL);
1066         if ((fp = g_fopen(path, "wb")) == NULL) {
1067                 FILE_OP_ERROR(path, "fopen");
1068                 g_free(path);
1069                 return;
1070         }
1071
1072         for (cur = list; cur != NULL; cur = cur->next) {
1073                 fputs((gchar *)cur->data, fp);
1074                 fputc('\n', fp);
1075         }
1076
1077         fclose(fp);
1078         g_free(path);
1079 }
1080
1081 void prefs_common_write_config(void)
1082 {
1083         prefs_write_config(param, "Common", COMMON_RC);
1084 #ifdef G_OS_WIN32
1085         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1086 #endif
1087
1088         prefs_common_save_history(COMMAND_HISTORY, 
1089                 prefs_common.mime_open_cmd_history);
1090         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1091                 prefs_common.summary_quicksearch_history);
1092         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1093                 prefs_common.summary_search_from_history);
1094         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1095                 prefs_common.summary_search_to_history);
1096         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1097                 prefs_common.summary_search_subject_history);
1098         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1099                 prefs_common.summary_search_body_history);
1100         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1101                 prefs_common.summary_search_adv_condition_history);
1102         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1103                 prefs_common.message_search_history);
1104 }
1105
1106 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1107    both 'in' and 'out' must be non-NULL.
1108    'out' must be a pointer to a buffer whose size is at least equal
1109    to strlen(txt)+1, this buffer will get cleared. out's contents
1110    will always get set to a valid string, even if it's "".*/
1111 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1112 {
1113         const gchar *i;
1114         gchar *o;
1115
1116         *out = '\0';
1117
1118         g_return_if_fail( in != NULL );
1119         g_return_if_fail( out != NULL );
1120
1121         i = in;
1122         o = out;
1123         memset(out, 0, strlen(in)+1);
1124         while (*i != '\0') {
1125                 if (*i == '\\' && *(i+1) == 'n') {
1126                         *o++ = '\n';
1127                         i++;
1128                 } else if (*i == '\\' && *(i+1) == 't') {
1129                         *o++ = '\t';
1130                         i++;
1131                 } else if (*i == '\\' && *(i+1) == '\\') {
1132                         *o++ = '\\';
1133                         i++;
1134                 } else {
1135                         *o++ = *i;
1136                 }
1137                 i++;
1138         }
1139         *o='\0';
1140 }
1141
1142 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1143    both 'in' and 'out' must be non-NULL.
1144    'out' must be a pointer to a buffer whose size is at least equal
1145    to 2*strlen(txt)+1. out's contents will always get set to a valid
1146    string, even if it's "". */
1147 void pref_get_escaped_pref(gchar *out, const gchar *in)
1148 {
1149         const gchar *i;
1150         gchar *o;
1151
1152         *out = '\0';
1153
1154         g_return_if_fail( in != NULL );
1155         g_return_if_fail( out != NULL );
1156
1157         i = in;
1158         o = out;
1159         while (*i != '\0') {
1160                 if (*i == '\n') {
1161                         *o++ = '\\';
1162                         *o++ = 'n';
1163                 } else if (*i == '\t') {
1164                         *o++ = '\\';
1165                         *o++ = 't';
1166                 } else if (*i == '\\') {
1167                         *o++ = '\\';
1168                         *o++ = '\\';
1169                 } else {
1170                         *o++ = *i;
1171                 }
1172                 i++;
1173         }
1174         *o = '\0';
1175 }
1176                 
1177 /* set the contents of a textview widget from the internal \-escaped
1178   representation of a pref string. both txt and textview must be non-NULL. */
1179 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1180 {
1181         GtkTextBuffer *buffer;
1182         gchar *out = NULL;
1183
1184         g_return_if_fail( txt != NULL );
1185         g_return_if_fail( textview != NULL );
1186
1187         buffer = gtk_text_view_get_buffer(textview);
1188         out = malloc(strlen(txt)+1);
1189
1190         pref_get_unescaped_pref(out, txt);
1191
1192         gtk_text_buffer_set_text(buffer, out?out:"", -1);
1193         g_free(out);
1194 }
1195
1196 /* set the contents of a gtkentry widget from the internal \-escaped
1197   representation of a pref string. both txt and entry must be non-NULL. */
1198 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1199 {
1200         gchar *out = NULL;
1201
1202         g_return_if_fail( txt != NULL );
1203         g_return_if_fail( entry != NULL );
1204
1205         out = malloc(strlen(txt)+1);
1206
1207         pref_get_unescaped_pref(out, txt);
1208
1209         gtk_entry_set_text(entry, out?out:"");
1210         g_free(out);
1211 }
1212
1213 /* get the \-escaped internal representation of a pref from the contents of
1214    a textview widget. textview must be non-NULL. */
1215 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1216 {
1217         GtkTextBuffer *buffer;
1218         GtkTextIter start, end;
1219         gchar *out, *tmp;
1220         
1221         g_return_val_if_fail( textview != NULL, "" );
1222
1223         buffer = gtk_text_view_get_buffer(textview);
1224         gtk_text_buffer_get_start_iter(buffer, &start);
1225         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1226         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1227         out = malloc(2*strlen(tmp)+1);
1228         
1229         pref_get_escaped_pref(out, tmp);
1230         g_free(tmp);
1231
1232         return out?out:"";
1233 }
1234
1235 /* get the \-escaped internal representation of a pref from the contents of
1236    a gtkentry widget. entry must be non-NULL. */
1237 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1238 {
1239         gchar *out, *tmp;
1240
1241         g_return_val_if_fail( entry != NULL, "" );
1242
1243         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1244         out = malloc(2*strlen(tmp)+1);
1245
1246         pref_get_escaped_pref(out, tmp);
1247         g_free(tmp);
1248
1249         return out?out:"";
1250 }
1251
1252 /* ugly hack to be able to get this pref from ssl_certificate.c */
1253 gboolean prefs_common_unsafe_ssl_certs(void)
1254 {
1255         return prefs_common.unsafe_ssl_certs;
1256 }