A documentação para modify-syntax-entrydiz o seguinte:
O que é uma cerca e quando eu usaria uma? Não consigo encontrar nada no manual de informações.
Esta é uma pergunta que o próprio Emacs deve responder. A sequência de documentos deve definir ou pelo menos descrever o termo " fence ". Por favor, considere a apresentação de um bug doc: M-x report-emacs-bug.
Normalmente, um delimitador de sequência ou comentário pode especificar qual caractere termina uma sequência. Por exemplo, um "só pode ser rescindido por outro ". No entanto, quando uma syntax-propertizefunção personalizada é usada para reconhecer uma sequência, isso não é possível. Em vez disso, você pode marcar os pontos finais de seqüências de caracteres e comentários usando |e !, respectivamente. (A documentação diz que essas classes de sintaxe principalmente deve ser usado quando se utiliza a syntax-tablepropriedade de texto, que é o que um personalizados syntax-propertizeconjuntos de funções.)
Eles estão documentados no manual, mas não usam a palavra "fence". Os caracteres !e |são listados como "delimitadores de comentários genéricos" e "delimitadores de cadeias genéricas" na referência de classe de sintaxe .
Esses caracteres foram introduzidos no Emacs 20.1. Citando o arquivo NEWS:
Existem dois novos códigos de sintaxe !e |(valores numéricos 14 e 15). Um caractere com um código !inicia um comentário que é encerrado apenas por outro caractere com o mesmo código (a menos que seja citado). Um caractere com um código |inicia uma string que é finalizada apenas por outro caractere com o mesmo código (a menos que seja citado).
Esses códigos destinam-se principalmente ao uso como valores da propriedade de texto `tabela de sintaxe '.
Não consigo encontrar nenhum uso !nos modos Emacs padrão. Existem vários usos de |. O caso de uso pretendido são idiomas que possuem literais que usam delimitadores que não sejam os delimitadores de seqüência de caracteres comuns, geralmente configurados por sobreposições adicionadas pelo bloqueio de fonte com base no contexto. Por exemplo, em perl, uma correspondência de expressão regular pode ser escrita /REGEXP/, m/REGEXP/ou m~REGEXP~ou m[REGEXP]ou qualquer número de variações. Uma string literal pode ser escrita 'STRING', mas também q'STRING', q~STRING~, q[STRING], etc. Quando o bloqueio da fonte reconhece tais construções, ele define os caracteres de aspas ( // /ou '/ 'ou ~/ ~ou [/]nos exemplos que dei) à sintaxe genérica do delimitador de string. Mesmo que um delimitador habitual de string esteja presente (por exemplo q[foo"bar]), esse delimitador será considerado uma parte comum da string, não a terminará.
Admito que não vejo um benefício definitivo - por exemplo, o modo CPerl faz algumas coisas muito sofisticadas e não usa esse recurso.
Use o modo Ruby !para destacar =begin... =endblocos.
Retirado da sintaxe.h:
Assumindo que os códigos de sintaxe e as classes de sintaxe regex se referem à mesma coisa, eu tenho uso manchado de |em cc-awk.elque utiliza "\\s|"para destacar delimitadores de cordas desequilibradas.
Eles são usados ​​em alguns lugares, por exemplo python-syntax-stringify, ruby-syntax-propertize-percent-literale outros . Não vejo como isso difere Sstringdaqui.