#2 is not Lisp - no comma.
#1 and #3 are almost right. And admittedly the doc for this function is a bit complex on this matter.
So the answer to your general question about passing multiple arguments is to do as you did (except for #2, with the comma).
The answer to your specific question about
hc-highlight-chars is to use this code:
(hc-highlight-chars '(";") 'highlight).
Interactively, as the doc says, you enter first the characters and then the name of a face. And a name is indeed a string, such as
But at the end of the doc string you see a description of the arguments for non-interactive use, and there it says that argument
FACE is a face. I've now clarified that further by adding
(e.g., a symbol) after it. A face is typically a symbol.
CHARS things are more complex. For that the doc says:
CHARS is a possible value for `hc-other-chars', that is, a list of
entries such as described above.
And you really need to consult the doc above, which explains that the spec of which chars to highlight is a list, each of whose elements can take multiple forms, one of which is a string of characters.
(";") is a list of one element that is a string of characters.
If you look more into the code you'll see that
hc-highlight-chars already uses
add-hook to add to
font-lock-mode-hook. It does this, for the current case:
(lambda () (hc-highlight-other-chars '("ab") nil 'highlight))
It can help perhaps to start by using
hc-highlight-chars interactively, to get the hang of what it does.
The doc (the file Commentary and other doc strings) tells you more about
hc-highlight-other-chars, other workhorse functions, and user option
hc-other-chars. You might need to read it twice to understand it all well, but I think the necessary info is there. Let me know if you find that's not the case.
As for your question about customizing a face: Do you mean how to customize face
highlight, which you used in your example? If so, the answer is
M-x customize-face highlight.
Or did you mean create a new face to use, which has attributes that you choose? For that, you use
defface -- see the Elisp manual, node Defining Faces.
Or did you perhaps mean provide a face specification on the fly, without changing any existing defined face or defining a new one (
defface)? You can do that this way, for example:
`(hc-highlight-chars '(";") '(:foreground "red" :background "green"))`
(This is why the doc describing the
FACE parameter to the function says that it is a face, without saying that it must be a symbol. A face can also be just such a property list (plist) of face attributes and their values.)