2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
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 3 of the License, or
8 * (at your option) any later version.
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.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #include <sys/types.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"
54 #include "alertpanel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
69 PrefsCommon prefs_common;
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.
82 # define SPECIFIC_PREFS prefs_unix
84 static PrefsCommon prefs_unix;
86 static PrefParam param_os_specific[] = {
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},
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},
105 {"attach_save_directory", NULL,
106 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
107 {"attach_load_directory", NULL,
108 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
111 {"mime_textviewer", NULL,
112 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
113 {"mime_open_command", "notepad '%s'",
114 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
117 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
118 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
121 {"uri_open_command", NULL,
122 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
123 {"print_command", "notepad /p %s",
124 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
125 {"ext_editor_command", "notepad %s",
126 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
128 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
131 # define SPECIFIC_PREFS prefs_common
135 parameter name, default value, pointer to the prefs variable, data type,
136 pointer to the widget pointer,
137 pointer to the function for data setting,
138 pointer to the function for widget setting
141 static PrefParam param[] = {
143 {"data_root", "", &prefs_common.data_root, P_STRING,
147 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
149 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
152 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
154 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
156 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
158 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
159 P_BOOL, NULL, NULL, NULL},
160 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
163 P_BOOL, NULL, NULL, NULL},
164 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
165 P_BOOL, NULL, NULL, NULL},
166 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
169 {"maemo_play_sound", "FALSE", &prefs_common.maemo_play_sound, P_BOOL,
171 {"maemo_show_banner", "FALSE", &prefs_common.maemo_show_banner, P_BOOL,
174 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
176 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
178 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
180 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
181 P_BOOL, NULL, NULL, NULL},
182 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
183 P_BOOL, NULL, NULL, NULL},
186 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
188 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
189 P_BOOL, NULL, NULL, NULL},
190 {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
192 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
194 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
197 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
199 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
202 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
203 P_BOOL, NULL, NULL, NULL},
206 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
208 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
209 P_BOOL, NULL, NULL, NULL},
210 {"redirect_keep_from", "FALSE",
211 &prefs_common.redirect_keep_from, P_BOOL,
213 {"undo_level", "50", &prefs_common.undolevels, P_INT,
215 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
217 {"compose_subject_format", "",
218 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
219 {"compose_body_format", N_("Hello,\\n"),
220 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
222 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
224 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
226 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
228 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
230 {"autosave", "TRUE", &prefs_common.autosave,
231 P_BOOL, NULL, NULL, NULL},
232 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
235 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
237 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
239 {"dictionary", "", &prefs_common.dictionary, P_STRING,
241 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
243 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
245 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
247 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
249 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
250 P_BOOL, NULL, NULL, NULL},
251 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
253 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
256 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
258 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
261 /* Account autoselection */
262 {"reply_account_autoselect", "TRUE",
263 &prefs_common.reply_account_autosel, P_BOOL,
265 {"forward_account_autoselect", "TRUE",
266 &prefs_common.forward_account_autosel, P_BOOL,
268 {"reedit_account_autoselect", "TRUE",
269 &prefs_common.reedit_account_autosel, P_BOOL,
272 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
276 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
279 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
284 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
286 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
287 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
289 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
291 {"forward_quote_format",
292 N_("\\n\\nBegin forwarded message:\\n\\n"
293 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
294 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
295 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
296 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
300 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
301 {"widget_font", NULL,
302 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
303 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
304 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
305 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
306 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
307 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
308 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
309 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
310 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
314 {"widget_font_gtk2", NULL,
315 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
316 {"message_font_gtk2", "Monospace 9",
317 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
318 {"print_font_gtk2", "Monospace 9",
319 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
320 {"small_font_gtk2", "Sans 9",
321 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
322 {"normal_font_gtk2", "Sans 9",
323 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
325 {"widget_font_gtk2", NULL,
326 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
327 {"message_font_gtk2", "Monospace 8",
328 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
329 {"print_font_gtk2", "Monospace 8",
330 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
331 {"small_font_gtk2", "Sans 8",
332 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
333 {"normal_font_gtk2", "Sans 8",
334 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
337 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
339 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
341 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
343 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
345 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
347 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
349 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
351 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
353 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
355 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
357 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
359 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
361 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
363 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
365 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
367 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
369 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
371 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
373 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
375 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
377 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
379 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
381 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
383 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
385 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
387 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
389 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
391 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
393 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
395 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
399 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
401 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
403 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
406 {"display_folder_unread_num", "0",
407 &prefs_common.display_folder_unread, P_INT,
409 {"newsgroup_abbrev_len", "16",
410 &prefs_common.ng_abbrev_len, P_INT,
413 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
416 /* Display: Summary View */
417 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
419 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
421 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
422 P_STRING, NULL, NULL, NULL},
424 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
427 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
430 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
433 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
436 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
438 {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
441 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
443 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
446 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
448 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
452 {"summary_col_show_mark", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_unread", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_subject", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_from", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_to", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_date", "TRUE",
463 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_mime", "TRUE",
465 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_size", "TRUE",
467 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_show_number", "FALSE",
469 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
470 {"summary_col_show_score", "FALSE",
471 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
472 {"summary_col_show_locked", "FALSE",
473 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
474 {"summary_col_show_tags", "FALSE",
475 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
477 {"summary_col_pos_mark", "0",
478 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_unread", "1",
480 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_mime", "2",
482 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_subject", "3",
484 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_from", "4",
486 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_date", "5",
488 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
489 {"summary_col_pos_size", "6",
490 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
491 {"summary_col_pos_number", "7",
492 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
493 {"summary_col_pos_score", "8",
494 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
495 {"summary_col_pos_locked", "9",
496 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
497 {"summary_col_pos_to", "10",
498 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
499 {"summary_col_pos_tags", "11",
500 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_mark", "10",
503 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_unread", "13",
505 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_mime", "10",
507 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_subject", "200",
510 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
511 {"summary_col_size_from", "120",
512 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
513 {"summary_col_size_to", "120",
514 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_subject", "300",
517 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_from", "150",
519 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_to", "150",
521 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
524 {"summary_col_size_date", "118",
525 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
526 {"summary_col_size_size", "45",
527 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
528 {"summary_col_size_number", "40",
529 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
530 {"summary_col_size_score", "40",
531 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
532 {"summary_col_size_locked", "13",
533 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
534 {"summary_col_size_tags", "150",
535 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
538 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
540 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
542 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
544 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
546 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
549 {"folder_col_show_folder", "TRUE",
550 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
551 {"folder_col_show_new", "TRUE",
552 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
553 {"folder_col_show_unread", "TRUE",
554 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
555 {"folder_col_show_total", "TRUE",
556 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
558 {"folder_col_pos_folder", "0",
559 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
560 {"folder_col_pos_new", "1",
561 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
562 {"folder_col_pos_unread", "2",
563 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
564 {"folder_col_pos_total", "3",
565 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
568 {"folder_col_size_folder", "120",
569 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
570 {"folder_col_size_new", "32",
571 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
572 {"folder_col_size_unread", "32",
573 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
574 {"folder_col_size_total", "32",
575 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
577 {"folder_col_size_folder", "400",
578 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
579 {"folder_col_size_new", "32",
580 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
581 {"folder_col_size_unread", "32",
582 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
583 {"folder_col_size_total", "32",
584 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
586 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
588 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
591 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
593 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
595 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
597 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
599 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
602 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
604 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
606 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
608 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
610 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
612 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
615 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
617 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
619 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
621 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
623 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
625 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
627 {"compose_width", "600", &prefs_common.compose_width, P_INT,
629 {"compose_height", "560", &prefs_common.compose_height, P_INT,
632 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
634 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
636 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
638 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
640 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
642 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
644 {"compose_width", "700", &prefs_common.compose_width, P_INT,
646 {"compose_height", "470", &prefs_common.compose_height, P_INT,
649 {"compose_x", "0", &prefs_common.compose_x, P_INT,
651 {"compose_y", "0", &prefs_common.compose_y, P_INT,
654 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
657 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
659 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
661 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
663 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
665 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
667 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
669 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
671 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
673 {"emphasis_color", "207", &prefs_common.emphasis_col, P_COLOR,
675 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
677 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
679 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
680 P_BOOL, NULL, NULL, NULL},
682 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
683 P_BOOL, NULL, NULL, NULL},
684 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
686 {"display_xface", "TRUE", &prefs_common.display_xface,
687 P_BOOL, NULL, NULL, NULL},
688 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
690 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
692 {"line_space", "2", &prefs_common.line_space, P_INT,
694 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
697 {"enable_smooth_scroll", "FALSE",
698 &prefs_common.enable_smooth_scroll, P_BOOL,
700 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
702 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
704 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
707 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
710 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
713 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
715 {"attach_save_directory", NULL,
716 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
717 {"attach_load_directory", NULL,
718 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
721 {"mime_textviewer", NULL,
722 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
723 {"mime_open_command", "gedit '%s'",
724 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
728 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
731 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
734 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
735 NULL, NULL, NULL}, */
736 {"always_show_message_when_selected", "FALSE",
737 &prefs_common.always_show_msg,
738 P_BOOL, NULL, NULL, NULL},
739 {"select_on_entry", "3", &prefs_common.select_on_entry,
740 P_ENUM, NULL, NULL, NULL},
741 {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
742 P_BOOL, NULL, NULL, NULL},
744 /* do it SUMMARY_OPEN_ACTIONS-1 times */
745 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
747 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
749 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
751 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
753 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
755 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
757 {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
760 {"mark_as_read_on_new_window", "FALSE",
761 &prefs_common.mark_as_read_on_new_window,
762 P_BOOL, NULL, NULL, NULL},
763 {"mark_as_read_delay", "0",
764 &prefs_common.mark_as_read_delay, P_INT,
766 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
768 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
771 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
772 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
775 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
778 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
780 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
784 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
785 P_BOOL, NULL, NULL, NULL},
786 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
787 P_INT, NULL, NULL, NULL},
788 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
789 P_INT, NULL, NULL, NULL},
792 {"uri_open_command", DEFAULT_BROWSER_CMD,
793 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
794 {"print_command", "lpr %s",
795 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
796 {"ext_editor_command", DEFAULT_EDITOR_CMD,
797 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
798 {"cmds_use_system_default", "FALSE",
799 &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
800 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
801 P_BOOL, NULL, NULL, NULL},
802 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
804 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
806 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
808 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
809 P_BOOL, NULL, NULL, NULL},
810 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
812 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
815 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
818 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
822 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
823 P_INT, NULL, NULL, NULL},
824 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
826 {"important_score", "1", &prefs_common.important_score, P_INT,
829 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
831 {"log_length", "500", &prefs_common.loglength, P_INT,
834 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
836 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
838 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
840 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
843 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
845 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
847 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
849 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
852 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
854 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
856 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
858 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
860 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
862 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
864 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
866 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
869 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
871 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
873 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
875 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
877 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
879 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
881 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
883 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
885 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
888 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
891 {"color_new", "179", &prefs_common.color_new, P_COLOR,
894 /* Some windows' sizes */
895 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
897 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
900 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
902 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
905 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
907 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
910 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
912 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
915 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
917 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
920 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
922 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
925 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
927 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
930 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
932 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
935 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
937 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
940 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
942 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
945 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
947 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
950 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
952 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
955 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
958 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
960 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
963 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
965 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
968 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
970 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
973 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
975 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
978 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
980 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
983 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
985 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
988 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
990 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
994 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
996 {"utf8_instead_of_locale_for_broken_mail", "0",
997 &prefs_common.broken_are_utf8, P_INT,
999 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1001 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1003 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1005 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1007 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
1009 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1011 {"folderview_vscrollbar_policy", "0",
1012 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1014 {"textview_cursor_visible", "FALSE",
1015 &prefs_common.textview_cursor_visible, P_BOOL,
1017 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1020 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1022 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1025 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1027 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1030 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1031 P_INT, NULL, NULL, NULL },
1032 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1033 P_STRING, NULL, NULL, NULL },
1034 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1035 P_BOOL, NULL, NULL, NULL },
1036 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1038 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1040 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1042 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1044 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1046 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1048 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1050 {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1052 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1054 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1057 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1060 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1064 {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1066 {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1068 {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1070 {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1072 {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1074 {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1076 {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1078 {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1080 {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1083 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1087 * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1088 * Fallback to default_list if history file is not found
1090 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1091 GList *default_list)
1095 gchar buf[PREFSBUFSIZE];
1099 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1100 G_DIR_SEPARATOR_S, history,
1103 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1106 if ((fp = g_fopen(path, "rb")) == NULL) {
1107 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1109 /* returns default list if set, otherwise NULL */
1110 return default_list;
1113 while (fgets(buf, sizeof(buf), fp) != NULL) {
1115 if (buf[0] == '\0') continue;
1116 tmp = add_history(tmp, buf);
1120 tmp = g_list_reverse(tmp);
1126 * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1128 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history)
1130 return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1134 * Read history list from the specified history file
1136 static GList *prefs_common_read_history(const gchar *history)
1138 return prefs_common_read_history_from_dir(NULL, history);
1141 void prefs_common_read_config(void)
1146 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1147 prefs_read_config(param, "Common", rcpath, NULL);
1149 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1154 tmp = g_strdup(gettext(prefs_common.quotefmt));
1155 g_free(prefs_common.quotefmt);
1156 prefs_common.quotefmt = tmp;
1158 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1159 g_free(prefs_common.fw_quotefmt);
1160 prefs_common.fw_quotefmt = tmp;
1162 tmp = g_strdup(gettext(prefs_common.date_format));
1163 g_free(prefs_common.date_format);
1164 prefs_common.date_format = tmp;
1166 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1167 g_free(prefs_common.compose_body_format);
1168 prefs_common.compose_body_format = tmp;
1170 prefs_common.mime_open_cmd_history =
1171 prefs_common_read_history(COMMAND_HISTORY);
1172 prefs_common.summary_quicksearch_history =
1173 prefs_common_read_history(QUICKSEARCH_HISTORY);
1174 prefs_common.summary_search_from_history =
1175 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1176 prefs_common.summary_search_to_history =
1177 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1178 prefs_common.summary_search_subject_history =
1179 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1180 prefs_common.summary_search_body_history =
1181 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1182 prefs_common.summary_search_adv_condition_history =
1183 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1184 prefs_common.message_search_history =
1185 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1187 prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1189 colorlabel_update_colortable_from_prefs();
1195 g_warning("failed to write\n"); \
1200 * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1202 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1206 gchar *path, *tmp_path;
1209 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1210 G_DIR_SEPARATOR_S, history,
1213 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1216 tmp_path = g_strconcat(path, ".tmp", NULL);
1218 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1219 FILE_OP_ERROR(tmp_path, "fopen");
1223 for (cur = list; cur != NULL; cur = cur->next) {
1224 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1225 fputc('\n', fp) != EOF);
1228 if (fclose(fp) == EOF) {
1229 FILE_OP_ERROR(tmp_path, "fclose");
1237 if (g_rename(tmp_path, path) < 0) {
1238 FILE_OP_ERROR(path, "rename");
1250 * Save history list to the specified history file
1252 static void prefs_common_save_history(const gchar *history, GList *list)
1254 prefs_common_save_history_to_dir(NULL, history, list);
1259 void prefs_common_write_config(void)
1261 prefs_write_config(param, "Common", COMMON_RC);
1263 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1266 prefs_common_save_history(COMMAND_HISTORY,
1267 prefs_common.mime_open_cmd_history);
1268 prefs_common_save_history(QUICKSEARCH_HISTORY,
1269 prefs_common.summary_quicksearch_history);
1270 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1271 prefs_common.summary_search_from_history);
1272 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1273 prefs_common.summary_search_to_history);
1274 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1275 prefs_common.summary_search_subject_history);
1276 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1277 prefs_common.summary_search_body_history);
1278 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1279 prefs_common.summary_search_adv_condition_history);
1280 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1281 prefs_common.message_search_history);
1283 prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1284 ADDRESSBOOK_CUSTOM_ATTRIBUTES,
1285 prefs_common.addressbook_custom_attributes);
1288 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1289 both 'in' and 'out' must be non-NULL.
1290 'out' must be a pointer to a buffer whose size is at least equal
1291 to strlen(txt)+1, this buffer will get cleared. out's contents
1292 will always get set to a valid string, even if it's "".*/
1293 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1300 g_return_if_fail( in != NULL );
1301 g_return_if_fail( out != NULL );
1305 memset(out, 0, strlen(in)+1);
1306 while (*i != '\0') {
1307 if (*i == '\\' && *(i+1) == 'n') {
1310 } else if (*i == '\\' && *(i+1) == 't') {
1313 } else if (*i == '\\' && *(i+1) == '\\') {
1324 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1325 both 'in' and 'out' must be non-NULL.
1326 'out' must be a pointer to a buffer whose size is at least equal
1327 to 2*strlen(txt)+1. out's contents will always get set to a valid
1328 string, even if it's "". */
1329 void pref_get_escaped_pref(gchar *out, const gchar *in)
1336 g_return_if_fail( in != NULL );
1337 g_return_if_fail( out != NULL );
1341 while (*i != '\0') {
1345 } else if (*i == '\t') {
1348 } else if (*i == '\\') {
1359 /* set the contents of a textview widget from the internal \-escaped
1360 representation of a pref string. both txt and textview must be non-NULL. */
1361 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1363 GtkTextBuffer *buffer;
1366 g_return_if_fail( textview != NULL );
1368 buffer = gtk_text_view_get_buffer(textview);
1371 gtk_text_buffer_set_text(buffer, "", -1);
1373 out = malloc(strlen(txt)+1);
1375 pref_get_unescaped_pref(out, txt);
1377 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1382 /* set the contents of a gtkentry widget from the internal \-escaped
1383 representation of a pref string. both txt and entry must be non-NULL. */
1384 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1388 g_return_if_fail( entry != NULL );
1390 gtk_entry_set_text(entry, "");
1392 out = malloc(strlen(txt)+1);
1394 pref_get_unescaped_pref(out, txt);
1396 gtk_entry_set_text(entry, out?out:"");
1401 /* get the \-escaped internal representation of a pref from the contents of
1402 a textview widget. textview must be non-NULL. */
1403 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1405 GtkTextBuffer *buffer;
1406 GtkTextIter start, end;
1409 g_return_val_if_fail( textview != NULL, "" );
1411 buffer = gtk_text_view_get_buffer(textview);
1412 gtk_text_buffer_get_start_iter(buffer, &start);
1413 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1414 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1415 out = malloc(2*strlen(tmp)+1);
1417 pref_get_escaped_pref(out, tmp);
1423 /* get the \-escaped internal representation of a pref from the contents of
1424 a gtkentry widget. entry must be non-NULL. */
1425 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1429 g_return_val_if_fail( entry != NULL, "" );
1431 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1432 out = malloc(2*strlen(tmp)+1);
1434 pref_get_escaped_pref(out, tmp);
1440 /* ugly hack to be able to get this pref from ssl_certificate.c */
1441 gboolean prefs_common_unsafe_ssl_certs(void)
1443 return prefs_common.unsafe_ssl_certs;
1446 gboolean prefs_common_enable_log_standard(void)
1448 return prefs_common.enable_log_standard;
1451 gboolean prefs_common_enable_log_warning(void)
1453 return prefs_common.enable_log_warning;
1455 gboolean prefs_common_enable_log_error(void)
1457 return prefs_common.enable_log_error;
1459 gboolean prefs_common_enable_log_status(void)
1461 return prefs_common.enable_log_status;
1465 const gchar *prefs_common_get_data_root(void)
1467 if (prefs_common.data_root && *prefs_common.data_root)
1468 return prefs_common.data_root;
1474 return the translated name of a header, if the translate_header option is
1475 set, otherwise return the untranslated header name (header_name itself).
1476 this function is provided for convenience, it's an interface to
1477 prefs_common.trans_hdr.
1478 works with header names either with or without trailing colon, provided
1479 that gettext found such header name in the sources (they should all be
1480 found in src/gtk/headers.h anyway).
1482 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1484 if (header_name == NULL || *header_name == '\0')
1487 return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1490 const gchar *prefs_common_get_uri_cmd(void)
1494 if (!prefs_common.cmds_use_system_default)
1495 return prefs_common.uri_cmd;
1497 tmp = g_find_program_in_path("xdg-open");
1499 return prefs_common.uri_cmd;
1502 return "xdg-open %s";
1505 const gchar *prefs_common_get_ext_editor_cmd(void)
1507 return prefs_common.ext_editor_cmd;
1508 #if 0 /* we should do that, but it detaches the editor and breaks
1509 compose.c's external composition. */
1512 if (!prefs_common.cmds_use_system_default)
1513 return prefs_common.ext_editor_cmd;
1515 tmp = g_find_program_in_path("xdg-open");
1517 return prefs_common.ext_editor_cmd;
1520 return "xdg-open %s";