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