2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2006 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 2 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, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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},
106 {"attach_save_directory", NULL,
107 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
108 {"attach_load_directory", NULL,
109 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
112 {"mime_textviewer", NULL,
113 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
114 {"mime_open_command", "notepad '%s'",
115 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
118 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
119 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
122 {"uri_open_command", NULL,
123 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
124 {"print_command", "notepad /p %s",
125 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
126 {"ext_editor_command", "notepad %s",
127 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
129 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
132 # define SPECIFIC_PREFS prefs_common
136 parameter name, default value, pointer to the prefs variable, data type,
137 pointer to the widget pointer,
138 pointer to the function for data setting,
139 pointer to the function for widget setting
142 static PrefParam param[] = {
144 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
146 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
149 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
151 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
153 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
155 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
156 P_BOOL, NULL, NULL, NULL},
157 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
158 P_BOOL, NULL, NULL, NULL},
159 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
160 P_BOOL, NULL, NULL, NULL},
161 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
162 P_BOOL, NULL, NULL, NULL},
163 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
165 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
167 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
169 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
171 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
172 P_BOOL, NULL, NULL, NULL},
173 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
174 P_BOOL, NULL, NULL, NULL},
177 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
179 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
180 P_BOOL, NULL, NULL, NULL},
181 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
183 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
185 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
188 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
190 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
193 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
194 P_BOOL, NULL, NULL, NULL},
197 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
199 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
200 P_BOOL, NULL, NULL, NULL},
201 {"redirect_keep_from", "FALSE",
202 &prefs_common.redirect_keep_from, P_BOOL,
204 {"undo_level", "50", &prefs_common.undolevels, P_INT,
206 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
208 {"compose_subject_format", "",
209 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
210 {"compose_body_format", N_("Hello,\\n"),
211 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
213 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
215 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
217 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
219 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
221 {"autosave", "TRUE", &prefs_common.autosave,
222 P_BOOL, NULL, NULL, NULL},
223 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
226 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
228 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
230 {"dictionary", "", &prefs_common.dictionary, P_STRING,
232 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
234 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
236 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
238 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
239 P_BOOL, NULL, NULL, NULL},
240 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
243 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
245 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
248 /* Account autoselection */
249 {"reply_account_autoselect", "TRUE",
250 &prefs_common.reply_account_autosel, P_BOOL,
252 {"forward_account_autoselect", "TRUE",
253 &prefs_common.forward_account_autosel, P_BOOL,
255 {"reedit_account_autoselect", "TRUE",
256 &prefs_common.reedit_account_autosel, P_BOOL,
259 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
262 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
266 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
268 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
269 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
271 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
273 {"forward_quote_format",
274 N_("\\n\\nBegin forwarded message:\\n\\n"
275 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
276 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
277 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
278 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
282 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
283 {"widget_font", NULL,
284 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
285 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
286 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
287 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
288 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
289 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
290 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
291 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
292 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"widget_font_gtk2", NULL,
296 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
297 {"message_font_gtk2", "Monospace 9",
298 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
299 {"print_font_gtk2", "Monospace 9",
300 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
301 {"small_font_gtk2", "Sans 9",
302 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
303 {"normal_font_gtk2", "Sans 9",
304 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
307 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
309 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
311 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
313 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
315 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
317 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
319 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
321 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
323 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
325 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
327 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
329 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
331 {"custom_color7", "#663366", &prefs_common.custom_colorlabel[6].color, P_COLOR,
333 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
337 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
339 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
341 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
344 {"display_folder_unread_num", "FALSE",
345 &prefs_common.display_folder_unread, P_BOOL,
347 {"newsgroup_abbrev_len", "16",
348 &prefs_common.ng_abbrev_len, P_INT,
351 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
354 /* Display: Summary View */
355 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
357 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
359 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
360 P_STRING, NULL, NULL, NULL},
362 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
365 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
367 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
369 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
371 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
373 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
377 {"summary_col_show_mark", "TRUE",
378 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
379 {"summary_col_show_unread", "TRUE",
380 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
381 {"summary_col_show_mime", "TRUE",
382 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
383 {"summary_col_show_subject", "TRUE",
384 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
385 {"summary_col_show_from", "TRUE",
386 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
387 {"summary_col_show_to", "FALSE",
388 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
389 {"summary_col_show_date", "TRUE",
390 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
391 {"summary_col_show_size", "TRUE",
392 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
393 {"summary_col_show_number", "FALSE",
394 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
395 {"summary_col_show_score", "FALSE",
396 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
397 {"summary_col_show_locked", "FALSE",
398 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
400 {"summary_col_pos_mark", "0",
401 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
402 {"summary_col_pos_unread", "1",
403 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
404 {"summary_col_pos_mime", "2",
405 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
406 {"summary_col_pos_subject", "3",
407 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
408 {"summary_col_pos_from", "4",
409 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
410 {"summary_col_pos_date", "5",
411 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
412 {"summary_col_pos_size", "6",
413 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
414 {"summary_col_pos_number", "7",
415 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
416 {"summary_col_pos_score", "8",
417 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
418 {"summary_col_pos_locked", "9",
419 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
420 {"summary_col_pos_to", "10",
421 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
423 {"summary_col_size_mark", "10",
424 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
425 {"summary_col_size_unread", "13",
426 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
427 {"summary_col_size_mime", "10",
428 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
429 {"summary_col_size_subject", "200",
430 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
431 {"summary_col_size_from", "120",
432 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
433 {"summary_col_size_to", "120",
434 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
435 {"summary_col_size_date", "118",
436 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
437 {"summary_col_size_size", "45",
438 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
439 {"summary_col_size_number", "40",
440 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
441 {"summary_col_size_score", "40",
442 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
443 {"summary_col_size_locked", "13",
444 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
447 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
449 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
451 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
453 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
455 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
458 {"folder_col_show_folder", "TRUE",
459 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
460 {"folder_col_show_new", "TRUE",
461 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
462 {"folder_col_show_unread", "TRUE",
463 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
464 {"folder_col_show_total", "TRUE",
465 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
467 {"folder_col_pos_folder", "0",
468 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
469 {"folder_col_pos_new", "1",
470 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
471 {"folder_col_pos_unread", "2",
472 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
473 {"folder_col_pos_total", "3",
474 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
476 {"folder_col_size_folder", "120",
477 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
478 {"folder_col_size_new", "32",
479 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
480 {"folder_col_size_unread", "32",
481 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
482 {"folder_col_size_total", "32",
483 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
485 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
487 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
490 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
492 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
494 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
496 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
498 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
501 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
503 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
505 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
507 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
509 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
511 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
513 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
515 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
517 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
519 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
521 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
523 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
525 {"compose_width", "600", &prefs_common.compose_width, P_INT,
527 {"compose_height", "560", &prefs_common.compose_height, P_INT,
529 {"compose_x", "0", &prefs_common.compose_x, P_INT,
531 {"compose_y", "0", &prefs_common.compose_y, P_INT,
534 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
537 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
539 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
541 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
543 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
545 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
547 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
549 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
551 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
553 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
555 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
557 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
558 P_BOOL, NULL, NULL, NULL},
560 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
561 P_BOOL, NULL, NULL, NULL},
562 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
564 {"display_xface", "TRUE", &prefs_common.display_xface,
565 P_BOOL, NULL, NULL, NULL},
566 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
568 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
570 {"line_space", "2", &prefs_common.line_space, P_INT,
572 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
575 {"enable_smooth_scroll", "FALSE",
576 &prefs_common.enable_smooth_scroll, P_BOOL,
578 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
580 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
582 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
585 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
588 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
591 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
593 {"attach_save_directory", NULL,
594 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
595 {"attach_load_directory", NULL,
596 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
599 {"mime_textviewer", NULL,
600 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
601 {"mime_open_command", "gedit '%s'",
602 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
605 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
607 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
610 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
611 NULL, NULL, NULL}, */
612 {"always_show_message_when_selected", "FALSE",
613 &prefs_common.always_show_msg,
614 P_BOOL, NULL, NULL, NULL},
615 {"select_on_entry", "2", &prefs_common.select_on_entry,
616 P_ENUM, NULL, NULL, NULL},
617 {"mark_as_read_on_new_window", "FALSE",
618 &prefs_common.mark_as_read_on_new_window,
619 P_BOOL, NULL, NULL, NULL},
620 {"mark_as_read_delay", "0",
621 &prefs_common.mark_as_read_delay, P_INT,
623 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
625 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
628 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
629 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
632 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
635 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
637 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
641 {"uri_open_command", DEFAULT_BROWSER_CMD,
642 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
643 {"print_command", "lpr %s",
644 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
645 {"ext_editor_command", DEFAULT_EDITOR_CMD,
646 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
648 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
649 P_BOOL, NULL, NULL, NULL},
650 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
652 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
654 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
656 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
657 P_BOOL, NULL, NULL, NULL},
658 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
660 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
662 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
665 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
666 P_INT, NULL, NULL, NULL},
667 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
669 {"important_score", "1", &prefs_common.important_score, P_INT,
671 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
673 {"log_length", "500", &prefs_common.loglength, P_INT,
675 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
677 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
679 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
681 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
683 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
686 {"color_new", "179", &prefs_common.color_new, P_COLOR,
689 /* Some windows' sizes */
690 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
692 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
695 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
697 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
700 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
702 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
705 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
707 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
710 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
712 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
715 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
717 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
720 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
722 {"addressbookeditpersonwin_height", "-1", &prefs_common.addressbookeditpersonwin_height, P_INT,
725 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
727 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
730 {"pluginswin_width", "480", &prefs_common.pluginswin_width, P_INT,
732 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
735 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
737 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
740 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
742 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
745 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
747 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
750 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
752 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
755 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
757 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
760 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
762 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
765 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
767 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
770 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
772 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
776 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
778 {"utf8_instead_of_locale_for_broken_mail", "0",
779 &prefs_common.broken_are_utf8, P_INT,
781 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
783 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
785 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
787 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
789 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
791 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
793 {"folderview_vscrollbar_policy", "0",
794 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
796 {"textview_cursor_visible", "FALSE",
797 &prefs_common.textview_cursor_visible, P_BOOL,
799 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
801 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
803 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
805 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
806 P_INT, NULL, NULL, NULL },
807 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
809 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
811 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
813 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
815 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
817 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
819 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
822 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
825 PrefsCommon *prefs_common_get(void)
827 return &prefs_common;
831 * Read history list from the specified history file
833 GList *prefs_common_read_history(const gchar *history)
837 gchar buf[PREFSBUFSIZE];
840 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
842 if ((fp = g_fopen(path, "rb")) == NULL) {
843 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
848 while (fgets(buf, sizeof(buf), fp) != NULL) {
850 if (buf[0] == '\0') continue;
851 tmp = add_history(tmp, buf);
855 tmp = g_list_reverse(tmp);
860 void prefs_common_read_config(void)
865 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
866 prefs_read_config(param, "Common", rcpath, NULL);
868 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
873 tmp = g_strdup(gettext(prefs_common.quotefmt));
874 g_free(prefs_common.quotefmt);
875 prefs_common.quotefmt = tmp;
877 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
878 g_free(prefs_common.fw_quotefmt);
879 prefs_common.fw_quotefmt = tmp;
881 tmp = g_strdup(gettext(prefs_common.date_format));
882 g_free(prefs_common.date_format);
883 prefs_common.date_format = tmp;
885 prefs_common.mime_open_cmd_history =
886 prefs_common_read_history(COMMAND_HISTORY);
887 prefs_common.summary_quicksearch_history =
888 prefs_common_read_history(QUICKSEARCH_HISTORY);
890 colorlabel_update_colortable_from_prefs();
894 * Save history list to the specified history file
896 void prefs_common_save_history(const gchar *history, GList *list)
902 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
904 if ((fp = g_fopen(path, "wb")) == NULL) {
905 FILE_OP_ERROR(path, "fopen");
910 for (cur = list; cur != NULL; cur = cur->next) {
911 fputs((gchar *)cur->data, fp);
919 void prefs_common_write_config(void)
921 prefs_write_config(param, "Common", COMMON_RC);
923 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
926 prefs_common_save_history(COMMAND_HISTORY,
927 prefs_common.mime_open_cmd_history);
928 prefs_common_save_history(QUICKSEARCH_HISTORY,
929 prefs_common.summary_quicksearch_history);
932 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
933 both 'in' and 'out' must be non-NULL.
934 'out' must be a pointer to a buffer whose size is at least equal
935 to strlen(txt)+1, this buffer will get cleared. out's contents
936 will always get set to a valid string, even if it's "".*/
937 void pref_get_unescaped_pref(gchar *out, const gchar *in)
944 g_return_if_fail( in != NULL );
945 g_return_if_fail( out != NULL );
949 memset(out, 0, strlen(in)+1);
951 if (*i == '\\' && *(i+1) == 'n') {
954 } else if (*i == '\\' && *(i+1) == 't') {
957 } else if (*i == '\\' && *(i+1) == '\\') {
968 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
969 both 'in' and 'out' must be non-NULL.
970 'out' must be a pointer to a buffer whose size is at least equal
971 to 2*strlen(txt)+1. out's contents will always get set to a valid
972 string, even if it's "". */
973 void pref_get_escaped_pref(gchar *out, const gchar *in)
980 g_return_if_fail( in != NULL );
981 g_return_if_fail( out != NULL );
989 } else if (*i == '\t') {
992 } else if (*i == '\\') {
1003 /* set the contents of a textview widget from the internal \-escaped
1004 representation of a pref string. both txt and textview must be non-NULL. */
1005 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1007 GtkTextBuffer *buffer;
1010 g_return_if_fail( txt != NULL );
1011 g_return_if_fail( textview != NULL );
1013 buffer = gtk_text_view_get_buffer(textview);
1014 out = malloc(strlen(txt)+1);
1016 pref_get_unescaped_pref(out, txt);
1018 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1022 /* set the contents of a gtkentry widget from the internal \-escaped
1023 representation of a pref string. both txt and entry must be non-NULL. */
1024 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1028 g_return_if_fail( txt != NULL );
1029 g_return_if_fail( entry != NULL );
1031 out = malloc(strlen(txt)+1);
1033 pref_get_unescaped_pref(out, txt);
1035 gtk_entry_set_text(entry, out?out:"");
1039 /* get the \-escaped internal representation of a pref from the contents of
1040 a textview widget. textview must be non-NULL. */
1041 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1043 GtkTextBuffer *buffer;
1044 GtkTextIter start, end;
1047 g_return_val_if_fail( textview != NULL, "" );
1049 buffer = gtk_text_view_get_buffer(textview);
1050 gtk_text_buffer_get_start_iter(buffer, &start);
1051 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1052 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1053 out = malloc(2*strlen(tmp)+1);
1055 pref_get_escaped_pref(out, tmp);
1061 /* get the \-escaped internal representation of a pref from the contents of
1062 a gtkentry widget. entry must be non-NULL. */
1063 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1067 g_return_val_if_fail( entry != NULL, "" );
1069 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1070 out = malloc(2*strlen(tmp)+1);
1072 pref_get_escaped_pref(out, tmp);