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