1 diff -urNp -x '*.orig' slrn-1.0.3.org/doc/slrn.rc slrn-1.0.3/doc/slrn.rc
2 --- slrn-1.0.3.org/doc/slrn.rc 2016-10-24 00:34:16.000000000 +0200
3 +++ slrn-1.0.3/doc/slrn.rc 2021-10-03 22:48:59.521057945 +0200
5 % display all the "X-"headers except "X-Trace:").
6 %visible_headers "From:,Subject:,Newsgroups:,Followup-To:,Reply-To:"
8 +% If non-zero, visible headers are displayed in specific order.
9 +% If 1, headers are arranged with respect to visible_headers order put above,
10 +% If 2, the same as above with multiple matches sorted alphabetically.
11 +%set visible_headers_sorting_method 2
13 % If non-zero, #v+ and #v- will be interpreted as markers of verbatim lines.
14 %set process_verbatim_marks 1
16 diff -urNp -x '*.orig' slrn-1.0.3.org/src/art.h slrn-1.0.3/src/art.h
17 --- slrn-1.0.3.org/src/art.h 2016-10-24 00:34:16.000000000 +0200
18 +++ slrn-1.0.3/src/art.h 2021-10-03 22:48:59.521057945 +0200
19 @@ -46,6 +46,7 @@ extern int Slrn_Query_Next_Group;
20 extern int Slrn_Auto_CC_To_Poster;
21 extern int Slrn_Score_After_XOver;
22 extern int Slrn_Use_Tmpdir;
23 +extern int Slrn_Visible_Headers_Sorting_Mode;
24 extern int Slrn_Wrap_Mode;
25 extern int Slrn_Wrap_Width;
26 extern int Slrn_Wrap_Method;
27 diff -urNp -x '*.orig' slrn-1.0.3.org/src/art_misc.c slrn-1.0.3/src/art_misc.c
28 --- slrn-1.0.3.org/src/art_misc.c 2016-10-24 00:34:16.000000000 +0200
29 +++ slrn-1.0.3/src/art_misc.c 2021-10-03 22:48:59.524391275 +0200
30 @@ -65,6 +65,8 @@ int Slrn_Wrap_Width = -1;
32 static char *Super_Cite_Regexp = "^[^A-Za-z0-9]*\"\\([-_a-zA-Z/]+\\)\" == .+";
34 +int Slrn_Visible_Headers_Sorting_Mode = 2;
36 static void hide_article_lines (Slrn_Article_Type *a, unsigned int mask) /*{{{*/
38 Slrn_Article_Line_Type *l;
39 @@ -935,6 +937,157 @@ void _slrn_art_unhide_headers (Slrn_Arti
43 +void _slrn_sort_visible_headers (Slrn_Article_Type *a) /*{{{*/
45 + Slrn_Article_Line_Type *l, *lnext, *sorted, *sorted_last;
46 + Slrn_Article_Line_Type *sorted_headers, *sorted_headers_last;
47 + Visible_Header_Type *sortpos, *sortpos_better;
48 + int is_better_match, sort_again;
49 + char *colon, *colon_next;
51 + if (Slrn_Visible_Headers_Sorting_Mode < 1) return;
53 + sorted_headers = NULL;
54 + sorted_headers_last = NULL;
55 + sortpos = Visible_Headers;
57 + while (sortpos != NULL)
63 + while ((l != NULL) && (l->flags & HEADER_LINE))
66 + if (0 == slrn_case_strncmp ((unsigned char *)l->buf,
67 + (unsigned char *)sortpos->header,
70 + sortpos_better = sortpos->next;
71 + is_better_match = 0;
72 + while ((sortpos_better != NULL) && (is_better_match == 0))
74 + if (0 == slrn_case_strncmp ((unsigned char *)l->buf,
75 + (unsigned char *)sortpos_better->header,
76 + sortpos_better->len))
78 + if (sortpos_better->len >= sortpos->len)
79 + is_better_match = 1;
81 + sortpos_better = sortpos_better->next;
84 + if (is_better_match == 0)
86 + if (l->prev != NULL)
87 + l->prev->next = l->next;
91 + if (l->next != NULL)
92 + l->next->prev = l->prev;
98 + sorted_last->next = l;
99 + l->prev = sorted_last;
107 + if (Slrn_Visible_Headers_Sorting_Mode > 1)
109 + if (sorted != sorted_last)
115 + sorted->prev = NULL;
116 + sorted_last->next = NULL;
118 + while (l != sorted_last)
122 + colon = slrn_strbyte (l->buf, ':');
126 + colon_next = slrn_strbyte (lnext->buf, ':');
127 + if (colon_next != NULL)
130 + if (0 < slrn_case_strcmp ((unsigned char *)l->buf,
131 + (unsigned char *)lnext->buf))
134 + if (l->prev != NULL)
135 + l->prev->next = lnext;
139 + lnext->prev = l->prev;
141 + l->next = lnext->next;
143 + if (l->next != NULL)
154 + if (colon_next != NULL)
163 + if (sorted != NULL)
165 + if (sorted_headers == NULL)
167 + sorted_headers = sorted;
168 + sorted_headers_last = sorted_last;
172 + sorted_headers->prev = sorted_last;
173 + sorted_last->next = sorted_headers;
174 + sorted_headers = sorted;
177 + sortpos = sortpos->next;
180 + if (sorted_headers != NULL)
182 + sorted_headers_last->next = a->lines;
183 + a->lines->prev = sorted_headers_last;
184 + a->lines = sorted_headers;
185 + a->cline = sorted_headers;
186 + sorted_headers->prev = NULL;
194 int _slrn_art_unfold_header_lines (Slrn_Article_Type *a) /*{{{*/
196 Slrn_Article_Line_Type *l;
197 @@ -979,6 +1132,9 @@ int _slrn_art_unfold_header_lines (Slrn_
202 + _slrn_sort_visible_headers (a);
207 diff -urNp -x '*.orig' slrn-1.0.3.org/src/startup.c slrn-1.0.3/src/startup.c
208 --- slrn-1.0.3.org/src/startup.c 2021-10-03 22:48:59.367724784 +0200
209 +++ slrn-1.0.3/src/startup.c 2021-10-03 22:48:59.524391275 +0200
210 @@ -626,6 +626,7 @@ Slrn_Int_Var_Type Slrn_Int_Variables []
211 {"cc_followup", &Slrn_Auto_CC_To_Poster, NULL},
212 {"use_tmpdir", &Slrn_Use_Tmpdir, NULL},
213 {"sorting_method", &Slrn_Sorting_Mode, NULL},
214 + {"visible_headers_sorting_method", &Slrn_Visible_Headers_Sorting_Mode},
215 {"custom_sort_by_threads", &Slrn_Sort_By_Threads, NULL},
216 {"uncollapse_threads", &Slrn_Uncollapse_Threads, NULL},
217 {"read_active", &Slrn_List_Active_File, NULL},