Function: set-coding-system-priority
set-coding-system-priority is a function defined in coding.c.
Signature
(set-coding-system-priority &rest coding-systems)
Documentation
Assign higher priority to the coding systems given as arguments.
If multiple coding systems belong to the same category, all but the first one are ignored.
Probably introduced at or before Emacs version 23.1.
Source Code
// Defined in /usr/src/emacs/src/coding.c
{
ptrdiff_t i, j;
bool changed[coding_category_max];
enum coding_category priorities[coding_category_max];
memset (changed, 0, sizeof changed);
for (i = j = 0; i < nargs; i++)
{
enum coding_category category;
Lisp_Object spec, attrs;
CHECK_CODING_SYSTEM_GET_SPEC (args[i], spec);
attrs = AREF (spec, 0);
category = XFIXNUM (CODING_ATTR_CATEGORY (attrs));
if (changed[category])
/* Ignore this coding system because a coding system of the
same category already had a higher priority. */
continue;
changed[category] = 1;
priorities[j++] = category;
if (coding_categories[category].id >= 0
&& ! EQ (args[i], CODING_ID_NAME (coding_categories[category].id)))
setup_coding_system (args[i], &coding_categories[category]);
Fset (AREF (Vcoding_category_table, category), args[i]);
}
/* Now we have decided top J priorities. Reflect the order of the
original priorities to the remaining priorities. */
for (i = j, j = 0; i < coding_category_max; i++, j++)
{
while (j < coding_category_max
&& changed[coding_priorities[j]])
j++;
if (j == coding_category_max)
emacs_abort ();
priorities[i] = coding_priorities[j];
}
memcpy (coding_priorities, priorities, sizeof priorities);
/* Update `coding-category-list'. */
Vcoding_category_list = Qnil;
for (i = coding_category_max; i-- > 0; )
Vcoding_category_list
= Fcons (AREF (Vcoding_category_table, priorities[i]),
Vcoding_category_list);
return Qnil;
}