Как использовать английскую строку в Emacs - PullRequest
6 голосов
/ 22 августа 2009

Мне интересно, что люди используют для правильного использования английских строк с заглавными буквами, так как «capitalize» не справится с этой задачей:

(capitalize "can't")
=> "Can'T"

Хотя написание этой функции тривиально, мне интересно, есть ли предпочтительный встроенный способ сделать это.

Ответы [ 4 ]

8 голосов
/ 22 августа 2009

Может быть, если вы временно добавите ' в таблицу синтаксиса текущего слова:

(modify-syntax-entry ?' "w")

(capitalize "can't")
=> "Can't"
5 голосов
/ 22 августа 2009

У меня есть M-c, связанное с заглавными буквами, и оно правильно работает с заглавными буквами can't.

1 голос
/ 06 августа 2014

Поведение, конечно, зависит от используемой синтаксической таблицы, то есть зависит от основного режима. Если символ ' имеет синтаксис "w p", он должен работать правильно. Это имеет место в текстовом режиме, но не в большинстве режимов программирования.

1 голос
/ 04 августа 2014

Текущие ответы в порядке, но если вы работаете со строками в коде, вы можете использовать s библиотеку для работы со строками. s-capitalize заглавная буква первого слова в предложении.

ELISP> (s-capitalize "can't win the war on drugs in a prison, where the hell you gonna win it?")
"Can't win the war on drugs in a prison, where the hell you gonna win it?"
ELISP> (s-join " " (-map 's-capitalize (s-split " " "can't win the war on drugs in a prison, where the hell you gonna win it?")))
"Can't Win The War On Drugs In A Prison, Where The Hell You Gonna Win It?"

s-titleize использует заглавные буквы в каждом слове в строке, но это простая оболочка для встроенного capitalize, поэтому Обходной путь Карла Войтланда применяется.

ELISP> (s-titleize "Girl, you can't even think of calling this shit a war.")
"Girl, You Can'T Even Think Of Calling This Shit A War."
ELISP> (progn (modify-syntax-entry ?' "w") (s-titleize "Girl, you can't even think of calling this shit a war."))
"Girl, You Can't Even Think Of Calling This Shit A War."
...