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
1089 static GList *prefs_common_read_history(const gchar *history)
1093 gchar buf[PREFSBUFSIZE];
1096 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1098 if ((fp = g_fopen(path, "rb")) == NULL) {
1099 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1104 while (fgets(buf, sizeof(buf), fp) != NULL) {
1106 if (buf[0] == '\0') continue;
1107 tmp = add_history(tmp, buf);
1111 tmp = g_list_reverse(tmp);
1116 void prefs_common_read_config(void)
1121 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1122 prefs_read_config(param, "Common", rcpath, NULL);
1124 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1129 tmp = g_strdup(gettext(prefs_common.quotefmt));
1130 g_free(prefs_common.quotefmt);
1131 prefs_common.quotefmt = tmp;
1133 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1134 g_free(prefs_common.fw_quotefmt);
1135 prefs_common.fw_quotefmt = tmp;
1137 tmp = g_strdup(gettext(prefs_common.date_format));
1138 g_free(prefs_common.date_format);
1139 prefs_common.date_format = tmp;
1141 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1142 g_free(prefs_common.compose_body_format);
1143 prefs_common.compose_body_format = tmp;
1145 prefs_common.mime_open_cmd_history =
1146 prefs_common_read_history(COMMAND_HISTORY);
1147 prefs_common.summary_quicksearch_history =
1148 prefs_common_read_history(QUICKSEARCH_HISTORY);
1149 prefs_common.summary_search_from_history =
1150 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1151 prefs_common.summary_search_to_history =
1152 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1153 prefs_common.summary_search_subject_history =
1154 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1155 prefs_common.summary_search_body_history =
1156 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1157 prefs_common.summary_search_adv_condition_history =
1158 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1159 prefs_common.message_search_history =
1160 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1162 colorlabel_update_colortable_from_prefs();
1168 g_warning("failed to write\n"); \
1173 * Save history list to the specified history file
1175 static void prefs_common_save_history(const gchar *history, GList *list)
1179 gchar *path, *tmp_path;
1181 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1183 tmp_path = g_strconcat(path, ".tmp", NULL);
1185 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1186 FILE_OP_ERROR(tmp_path, "fopen");
1190 for (cur = list; cur != NULL; cur = cur->next) {
1191 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1192 fputc('\n', fp) != EOF);
1195 if (fclose(fp) == EOF) {
1196 FILE_OP_ERROR(tmp_path, "fclose");
1204 if (g_rename(tmp_path, path) < 0) {
1205 FILE_OP_ERROR(path, "rename");
1218 void prefs_common_write_config(void)
1220 prefs_write_config(param, "Common", COMMON_RC);
1222 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1225 prefs_common_save_history(COMMAND_HISTORY,
1226 prefs_common.mime_open_cmd_history);
1227 prefs_common_save_history(QUICKSEARCH_HISTORY,
1228 prefs_common.summary_quicksearch_history);
1229 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1230 prefs_common.summary_search_from_history);
1231 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1232 prefs_common.summary_search_to_history);
1233 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1234 prefs_common.summary_search_subject_history);
1235 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1236 prefs_common.summary_search_body_history);
1237 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1238 prefs_common.summary_search_adv_condition_history);
1239 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1240 prefs_common.message_search_history);
1243 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1244 both 'in' and 'out' must be non-NULL.
1245 'out' must be a pointer to a buffer whose size is at least equal
1246 to strlen(txt)+1, this buffer will get cleared. out's contents
1247 will always get set to a valid string, even if it's "".*/
1248 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1255 g_return_if_fail( in != NULL );
1256 g_return_if_fail( out != NULL );
1260 memset(out, 0, strlen(in)+1);
1261 while (*i != '\0') {
1262 if (*i == '\\' && *(i+1) == 'n') {
1265 } else if (*i == '\\' && *(i+1) == 't') {
1268 } else if (*i == '\\' && *(i+1) == '\\') {
1279 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1280 both 'in' and 'out' must be non-NULL.
1281 'out' must be a pointer to a buffer whose size is at least equal
1282 to 2*strlen(txt)+1. out's contents will always get set to a valid
1283 string, even if it's "". */
1284 void pref_get_escaped_pref(gchar *out, const gchar *in)
1291 g_return_if_fail( in != NULL );
1292 g_return_if_fail( out != NULL );
1296 while (*i != '\0') {
1300 } else if (*i == '\t') {
1303 } else if (*i == '\\') {
1314 /* set the contents of a textview widget from the internal \-escaped
1315 representation of a pref string. both txt and textview must be non-NULL. */
1316 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1318 GtkTextBuffer *buffer;
1321 g_return_if_fail( textview != NULL );
1323 buffer = gtk_text_view_get_buffer(textview);
1326 gtk_text_buffer_set_text(buffer, "", -1);
1328 out = malloc(strlen(txt)+1);
1330 pref_get_unescaped_pref(out, txt);
1332 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1337 /* set the contents of a gtkentry widget from the internal \-escaped
1338 representation of a pref string. both txt and entry must be non-NULL. */
1339 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1343 g_return_if_fail( entry != NULL );
1345 gtk_entry_set_text(entry, "");
1347 out = malloc(strlen(txt)+1);
1349 pref_get_unescaped_pref(out, txt);
1351 gtk_entry_set_text(entry, out?out:"");
1356 /* get the \-escaped internal representation of a pref from the contents of
1357 a textview widget. textview must be non-NULL. */
1358 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1360 GtkTextBuffer *buffer;
1361 GtkTextIter start, end;
1364 g_return_val_if_fail( textview != NULL, "" );
1366 buffer = gtk_text_view_get_buffer(textview);
1367 gtk_text_buffer_get_start_iter(buffer, &start);
1368 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1369 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1370 out = malloc(2*strlen(tmp)+1);
1372 pref_get_escaped_pref(out, tmp);
1378 /* get the \-escaped internal representation of a pref from the contents of
1379 a gtkentry widget. entry must be non-NULL. */
1380 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1384 g_return_val_if_fail( entry != NULL, "" );
1386 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1387 out = malloc(2*strlen(tmp)+1);
1389 pref_get_escaped_pref(out, tmp);
1395 /* ugly hack to be able to get this pref from ssl_certificate.c */
1396 gboolean prefs_common_unsafe_ssl_certs(void)
1398 return prefs_common.unsafe_ssl_certs;
1401 gboolean prefs_common_enable_log_standard(void)
1403 return prefs_common.enable_log_standard;
1406 gboolean prefs_common_enable_log_warning(void)
1408 return prefs_common.enable_log_warning;
1410 gboolean prefs_common_enable_log_error(void)
1412 return prefs_common.enable_log_error;
1414 gboolean prefs_common_enable_log_status(void)
1416 return prefs_common.enable_log_status;
1420 const gchar *prefs_common_get_data_root(void)
1422 if (prefs_common.data_root && *prefs_common.data_root)
1423 return prefs_common.data_root;
1429 return the translated name of a header, if the translate_header option is
1430 set, otherwise return the untranslated header name (header_name itself).
1431 this function is provided for convenience, it's an interface to
1432 prefs_common.trans_hdr.
1433 works with header names either with or without trailing colon, provided
1434 that gettext found such header name in the sources (they should all be
1435 found in src/gtk/headers.h anyway).
1437 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1439 if (header_name == NULL || *header_name == '\0')
1442 return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1445 const gchar *prefs_common_get_uri_cmd(void)
1449 if (!prefs_common.cmds_use_system_default)
1450 return prefs_common.uri_cmd;
1452 tmp = g_find_program_in_path("xdg-open");
1454 return prefs_common.uri_cmd;
1457 return "xdg-open %s";
1460 const gchar *prefs_common_get_ext_editor_cmd(void)
1462 return prefs_common.ext_editor_cmd;
1463 #if 0 /* we should do that, but it detaches the editor and breaks
1464 compose.c's external composition. */
1467 if (!prefs_common.cmds_use_system_default)
1468 return prefs_common.ext_editor_cmd;
1470 tmp = g_find_program_in_path("xdg-open");
1472 return prefs_common.ext_editor_cmd;
1475 return "xdg-open %s";