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,
168 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
170 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
172 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
174 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
175 P_BOOL, NULL, NULL, NULL},
176 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
177 P_BOOL, NULL, NULL, NULL},
180 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
182 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
183 P_BOOL, NULL, NULL, NULL},
184 {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
186 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
188 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
191 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
193 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
196 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
197 P_BOOL, NULL, NULL, NULL},
200 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
202 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
203 P_BOOL, NULL, NULL, NULL},
204 {"redirect_keep_from", "FALSE",
205 &prefs_common.redirect_keep_from, P_BOOL,
207 {"undo_level", "50", &prefs_common.undolevels, P_INT,
209 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
211 {"compose_subject_format", "",
212 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
213 {"compose_body_format", N_("Hello,\\n"),
214 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
216 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
218 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
220 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
222 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
224 {"autosave", "TRUE", &prefs_common.autosave,
225 P_BOOL, NULL, NULL, NULL},
226 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
229 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
231 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
233 {"dictionary", "", &prefs_common.dictionary, P_STRING,
235 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
237 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
239 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
241 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
243 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
244 P_BOOL, NULL, NULL, NULL},
245 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
247 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
250 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
252 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
255 /* Account autoselection */
256 {"reply_account_autoselect", "TRUE",
257 &prefs_common.reply_account_autosel, P_BOOL,
259 {"forward_account_autoselect", "TRUE",
260 &prefs_common.forward_account_autosel, P_BOOL,
262 {"reedit_account_autoselect", "TRUE",
263 &prefs_common.reedit_account_autosel, P_BOOL,
266 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
270 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
273 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
278 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
280 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
281 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
283 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
285 {"forward_quote_format",
286 N_("\\n\\nBegin forwarded message:\\n\\n"
287 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
288 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
289 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
290 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
294 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
295 {"widget_font", NULL,
296 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
297 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
298 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
299 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
300 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
301 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
302 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
303 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
304 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
308 {"widget_font_gtk2", NULL,
309 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
310 {"message_font_gtk2", "Monospace 9",
311 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
312 {"print_font_gtk2", "Monospace 9",
313 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
314 {"small_font_gtk2", "Sans 9",
315 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
316 {"normal_font_gtk2", "Sans 9",
317 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
319 {"widget_font_gtk2", NULL,
320 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
321 {"message_font_gtk2", "Monospace 8",
322 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
323 {"print_font_gtk2", "Monospace 8",
324 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
325 {"small_font_gtk2", "Sans 8",
326 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
327 {"normal_font_gtk2", "Sans 8",
328 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
331 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
333 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
335 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
337 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
339 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
341 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
343 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
345 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
347 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
349 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
351 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
353 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
355 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
357 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
359 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
361 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
363 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
365 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
367 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
369 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
371 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
373 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
375 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
377 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
379 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
381 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
383 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
385 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
387 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
389 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
393 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
395 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
397 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
400 {"display_folder_unread_num", "0",
401 &prefs_common.display_folder_unread, P_INT,
403 {"newsgroup_abbrev_len", "16",
404 &prefs_common.ng_abbrev_len, P_INT,
407 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
410 /* Display: Summary View */
411 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
413 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
415 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
416 P_STRING, NULL, NULL, NULL},
418 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
421 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
424 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
427 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
430 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
433 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
435 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
438 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
440 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
444 {"summary_col_show_mark", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_unread", "TRUE",
447 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_subject", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_from", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_to", "FALSE",
453 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_date", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_mime", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_size", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_number", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_score", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_locked", "FALSE",
465 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_tags", "FALSE",
467 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
469 {"summary_col_pos_mark", "0",
470 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_unread", "1",
472 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_mime", "2",
474 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_subject", "3",
476 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_from", "4",
478 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_date", "5",
480 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_size", "6",
482 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_number", "7",
484 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_score", "8",
486 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_locked", "9",
488 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
489 {"summary_col_pos_to", "10",
490 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
491 {"summary_col_pos_tags", "11",
492 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_mark", "10",
495 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
496 {"summary_col_size_unread", "13",
497 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
498 {"summary_col_size_mime", "10",
499 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_subject", "200",
502 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
503 {"summary_col_size_from", "120",
504 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
505 {"summary_col_size_to", "120",
506 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_subject", "300",
509 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
510 {"summary_col_size_from", "150",
511 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_to", "150",
513 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_date", "118",
517 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_size", "45",
519 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_number", "40",
521 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
522 {"summary_col_size_score", "40",
523 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
524 {"summary_col_size_locked", "13",
525 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
526 {"summary_col_size_tags", "150",
527 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
530 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
532 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
534 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
536 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
538 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
541 {"folder_col_show_folder", "TRUE",
542 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
543 {"folder_col_show_new", "TRUE",
544 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
545 {"folder_col_show_unread", "TRUE",
546 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
547 {"folder_col_show_total", "TRUE",
548 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
550 {"folder_col_pos_folder", "0",
551 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
552 {"folder_col_pos_new", "1",
553 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
554 {"folder_col_pos_unread", "2",
555 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
556 {"folder_col_pos_total", "3",
557 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
560 {"folder_col_size_folder", "120",
561 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
562 {"folder_col_size_new", "32",
563 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
564 {"folder_col_size_unread", "32",
565 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
566 {"folder_col_size_total", "32",
567 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
569 {"folder_col_size_folder", "400",
570 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
571 {"folder_col_size_new", "32",
572 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
573 {"folder_col_size_unread", "32",
574 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
575 {"folder_col_size_total", "32",
576 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
578 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
580 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
583 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
585 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
587 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
589 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
591 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
594 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
596 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
598 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
600 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
602 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
604 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
607 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
609 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
611 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
613 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
615 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
617 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
619 {"compose_width", "600", &prefs_common.compose_width, P_INT,
621 {"compose_height", "560", &prefs_common.compose_height, P_INT,
624 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
626 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
628 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
630 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
632 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
634 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
636 {"compose_width", "700", &prefs_common.compose_width, P_INT,
638 {"compose_height", "470", &prefs_common.compose_height, P_INT,
641 {"compose_x", "0", &prefs_common.compose_x, P_INT,
643 {"compose_y", "0", &prefs_common.compose_y, P_INT,
646 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
649 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
651 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
653 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
655 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
657 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
659 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
661 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
663 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
665 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
667 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
669 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
670 P_BOOL, NULL, NULL, NULL},
672 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
673 P_BOOL, NULL, NULL, NULL},
674 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
676 {"display_xface", "TRUE", &prefs_common.display_xface,
677 P_BOOL, NULL, NULL, NULL},
678 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
680 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
682 {"line_space", "2", &prefs_common.line_space, P_INT,
684 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
687 {"enable_smooth_scroll", "FALSE",
688 &prefs_common.enable_smooth_scroll, P_BOOL,
690 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
692 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
694 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
697 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
700 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
703 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
705 {"attach_save_directory", NULL,
706 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
707 {"attach_load_directory", NULL,
708 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
711 {"mime_textviewer", NULL,
712 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
713 {"mime_open_command", "gedit '%s'",
714 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
718 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
721 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
724 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
725 NULL, NULL, NULL}, */
726 {"always_show_message_when_selected", "FALSE",
727 &prefs_common.always_show_msg,
728 P_BOOL, NULL, NULL, NULL},
729 {"select_on_entry", "3", &prefs_common.select_on_entry,
730 P_ENUM, NULL, NULL, NULL},
732 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
734 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
736 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
738 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
740 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
742 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
745 {"mark_as_read_on_new_window", "FALSE",
746 &prefs_common.mark_as_read_on_new_window,
747 P_BOOL, NULL, NULL, NULL},
748 {"mark_as_read_delay", "0",
749 &prefs_common.mark_as_read_delay, P_INT,
751 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
753 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
756 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
757 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
760 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
763 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
765 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
769 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
770 P_BOOL, NULL, NULL, NULL},
771 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
772 P_INT, NULL, NULL, NULL},
773 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
774 P_INT, NULL, NULL, NULL},
777 {"uri_open_command", DEFAULT_BROWSER_CMD,
778 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
779 {"print_command", "lpr %s",
780 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
781 {"ext_editor_command", DEFAULT_EDITOR_CMD,
782 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
783 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
784 P_BOOL, NULL, NULL, NULL},
785 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
787 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
789 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
791 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
792 P_BOOL, NULL, NULL, NULL},
793 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
795 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
798 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
801 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
805 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
806 P_INT, NULL, NULL, NULL},
807 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
809 {"important_score", "1", &prefs_common.important_score, P_INT,
812 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
814 {"log_length", "500", &prefs_common.loglength, P_INT,
817 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
819 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
821 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
823 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
826 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
828 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
830 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
832 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
835 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
837 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
839 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
841 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
843 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
845 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
847 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
849 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
852 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
854 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
856 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
858 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
860 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
862 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
864 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
866 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
868 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
871 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
874 {"color_new", "179", &prefs_common.color_new, P_COLOR,
877 /* Some windows' sizes */
878 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
880 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
883 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
885 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
888 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
890 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
893 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
895 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
898 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
900 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
903 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
905 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
908 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
910 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
913 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
915 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
918 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
920 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
923 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
925 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
928 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
930 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
933 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
935 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
938 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
941 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
943 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
946 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
948 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
951 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
953 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
956 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
958 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
961 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
963 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
966 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
968 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
971 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
973 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
977 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
979 {"utf8_instead_of_locale_for_broken_mail", "0",
980 &prefs_common.broken_are_utf8, P_INT,
982 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
984 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
986 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
988 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
990 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
992 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
994 {"folderview_vscrollbar_policy", "0",
995 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
997 {"textview_cursor_visible", "FALSE",
998 &prefs_common.textview_cursor_visible, P_BOOL,
1000 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1003 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1005 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1008 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1010 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1013 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1014 P_INT, NULL, NULL, NULL },
1015 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1016 P_STRING, NULL, NULL, NULL },
1017 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1018 P_BOOL, NULL, NULL, NULL },
1019 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1021 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1023 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1025 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1027 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1029 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1031 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1033 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1035 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1038 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1041 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1044 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1047 PrefsCommon *prefs_common_get(void)
1049 return &prefs_common;
1053 * Read history list from the specified history file
1055 static GList *prefs_common_read_history(const gchar *history)
1059 gchar buf[PREFSBUFSIZE];
1062 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1064 if ((fp = g_fopen(path, "rb")) == NULL) {
1065 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1070 while (fgets(buf, sizeof(buf), fp) != NULL) {
1072 if (buf[0] == '\0') continue;
1073 tmp = add_history(tmp, buf);
1077 tmp = g_list_reverse(tmp);
1082 void prefs_common_read_config(void)
1087 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1088 prefs_read_config(param, "Common", rcpath, NULL);
1090 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1095 tmp = g_strdup(gettext(prefs_common.quotefmt));
1096 g_free(prefs_common.quotefmt);
1097 prefs_common.quotefmt = tmp;
1099 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1100 g_free(prefs_common.fw_quotefmt);
1101 prefs_common.fw_quotefmt = tmp;
1103 tmp = g_strdup(gettext(prefs_common.date_format));
1104 g_free(prefs_common.date_format);
1105 prefs_common.date_format = tmp;
1107 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1108 g_free(prefs_common.compose_body_format);
1109 prefs_common.compose_body_format = tmp;
1111 prefs_common.mime_open_cmd_history =
1112 prefs_common_read_history(COMMAND_HISTORY);
1113 prefs_common.summary_quicksearch_history =
1114 prefs_common_read_history(QUICKSEARCH_HISTORY);
1115 prefs_common.summary_search_from_history =
1116 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1117 prefs_common.summary_search_to_history =
1118 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1119 prefs_common.summary_search_subject_history =
1120 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1121 prefs_common.summary_search_body_history =
1122 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1123 prefs_common.summary_search_adv_condition_history =
1124 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1125 prefs_common.message_search_history =
1126 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1128 colorlabel_update_colortable_from_prefs();
1134 g_warning("failed to write\n"); \
1139 * Save history list to the specified history file
1141 static void prefs_common_save_history(const gchar *history, GList *list)
1145 gchar *path, *tmp_path;
1147 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1149 tmp_path = g_strconcat(path, ".tmp", NULL);
1151 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1152 FILE_OP_ERROR(tmp_path, "fopen");
1156 for (cur = list; cur != NULL; cur = cur->next) {
1157 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1158 fputc('\n', fp) != EOF);
1161 if (fclose(fp) == EOF) {
1162 FILE_OP_ERROR(tmp_path, "fclose");
1170 if (g_rename(tmp_path, path) < 0) {
1171 FILE_OP_ERROR(path, "rename");
1184 void prefs_common_write_config(void)
1186 prefs_write_config(param, "Common", COMMON_RC);
1188 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1191 prefs_common_save_history(COMMAND_HISTORY,
1192 prefs_common.mime_open_cmd_history);
1193 prefs_common_save_history(QUICKSEARCH_HISTORY,
1194 prefs_common.summary_quicksearch_history);
1195 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1196 prefs_common.summary_search_from_history);
1197 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1198 prefs_common.summary_search_to_history);
1199 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1200 prefs_common.summary_search_subject_history);
1201 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1202 prefs_common.summary_search_body_history);
1203 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1204 prefs_common.summary_search_adv_condition_history);
1205 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1206 prefs_common.message_search_history);
1209 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1210 both 'in' and 'out' must be non-NULL.
1211 'out' must be a pointer to a buffer whose size is at least equal
1212 to strlen(txt)+1, this buffer will get cleared. out's contents
1213 will always get set to a valid string, even if it's "".*/
1214 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1221 g_return_if_fail( in != NULL );
1222 g_return_if_fail( out != NULL );
1226 memset(out, 0, strlen(in)+1);
1227 while (*i != '\0') {
1228 if (*i == '\\' && *(i+1) == 'n') {
1231 } else if (*i == '\\' && *(i+1) == 't') {
1234 } else if (*i == '\\' && *(i+1) == '\\') {
1245 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1246 both 'in' and 'out' must be non-NULL.
1247 'out' must be a pointer to a buffer whose size is at least equal
1248 to 2*strlen(txt)+1. out's contents will always get set to a valid
1249 string, even if it's "". */
1250 void pref_get_escaped_pref(gchar *out, const gchar *in)
1257 g_return_if_fail( in != NULL );
1258 g_return_if_fail( out != NULL );
1262 while (*i != '\0') {
1266 } else if (*i == '\t') {
1269 } else if (*i == '\\') {
1280 /* set the contents of a textview widget from the internal \-escaped
1281 representation of a pref string. both txt and textview must be non-NULL. */
1282 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1284 GtkTextBuffer *buffer;
1287 g_return_if_fail( textview != NULL );
1289 buffer = gtk_text_view_get_buffer(textview);
1292 gtk_text_buffer_set_text(buffer, "", -1);
1294 out = malloc(strlen(txt)+1);
1296 pref_get_unescaped_pref(out, txt);
1298 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1303 /* set the contents of a gtkentry widget from the internal \-escaped
1304 representation of a pref string. both txt and entry must be non-NULL. */
1305 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1309 g_return_if_fail( entry != NULL );
1311 gtk_entry_set_text(entry, "");
1313 out = malloc(strlen(txt)+1);
1315 pref_get_unescaped_pref(out, txt);
1317 gtk_entry_set_text(entry, out?out:"");
1322 /* get the \-escaped internal representation of a pref from the contents of
1323 a textview widget. textview must be non-NULL. */
1324 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1326 GtkTextBuffer *buffer;
1327 GtkTextIter start, end;
1330 g_return_val_if_fail( textview != NULL, "" );
1332 buffer = gtk_text_view_get_buffer(textview);
1333 gtk_text_buffer_get_start_iter(buffer, &start);
1334 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1335 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1336 out = malloc(2*strlen(tmp)+1);
1338 pref_get_escaped_pref(out, tmp);
1344 /* get the \-escaped internal representation of a pref from the contents of
1345 a gtkentry widget. entry must be non-NULL. */
1346 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1350 g_return_val_if_fail( entry != NULL, "" );
1352 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1353 out = malloc(2*strlen(tmp)+1);
1355 pref_get_escaped_pref(out, tmp);
1361 /* ugly hack to be able to get this pref from ssl_certificate.c */
1362 gboolean prefs_common_unsafe_ssl_certs(void)
1364 return prefs_common.unsafe_ssl_certs;
1367 gboolean prefs_common_enable_log_standard(void)
1369 return prefs_common.enable_log_standard;
1372 gboolean prefs_common_enable_log_warning(void)
1374 return prefs_common.enable_log_warning;
1376 gboolean prefs_common_enable_log_error(void)
1378 return prefs_common.enable_log_error;
1380 gboolean prefs_common_enable_log_status(void)
1382 return prefs_common.enable_log_status;
1386 const gchar *prefs_common_get_data_root(void)
1388 if (prefs_common.data_root && *prefs_common.data_root)
1389 return prefs_common.data_root;
1395 return the translated name of a header, if the translate_header option is
1396 set, otherwise return the untranslated header name (header_name itself).
1397 this function is provided for convenience, it's an interface to
1398 prefs_common.trans_hdr.
1399 works with header names either with or without trailing colon, provided
1400 that gettext found such header name in the sources (they should all be
1401 found in src/gtk/headers.h anyway).
1403 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1405 if (header_name == NULL || *header_name == '\0')
1408 return prefs_common.trans_hdr ? gettext(header_name) : header_name;