日本語の括弧の入力が面倒くさい
VS codeなどの開発用のエディタの多くは、クォーテーションや括弧の前だけを入れれば後ろは自動補完してくれます。
日本語の文章を書く時にもこれが欲しいなぁと思っていました。
日本語の場合、変換が絡むので余計に面倒です。
括弧やクオーテーションを中の文字と一緒に入力すると、別の括弧類に変換されて困ったりします。
このため、まず括弧類を「」のように単体で入力しておき、カーソル位置をひとつ戻して中身を入力することが多くなります。これって感覚的にも不自然でちょっと居心地が悪いです。
そんなわけで括弧類の前半だけを入力すれば、後ろ半分は自動補完して、カーソルを括弧の間に置いてくれるWebアプリを作ってみました。

すぐに試してみたい方は、こちらへ。
Japanese Quote Auto Completion (github pages)
compositionstartとcompositionendでIMEの動作を監視できる
そもそもそんなことできるのかなと、調べてみると textareaなどの入力要素で "compositionstart", "compositionend" というイベントを使えばIMEの動作を監視できることが分かりました。
例えば、input_element という要素に対して,以下のようにイベントをセットします。
javascript
//入力開始時にコンソールに表示
input_element.addEventListener('compositionstart', function (e) {
console.log("input start!");
}
また、compositionend でたは e.data でIMEで確定した文字列が取得できます。
html
//確定した文字列をコンソールに表示
input_element.addEventListener('compositionend', function (e) {
conole.log(e.data);
}
今回のアプリでは、この文字列をswitch文でチェックして、前括弧であれば補完するようにしています。
このイベントが素晴らしいのは、IME専用イベントなので半角直接入力は無視できることです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Japanese Quote Auto Completion</title>
<style type="text/css">
#text-area {
font-size: 24px;
}
</style>
</head>
<body>
<h1>日本語の括弧類を自動補完する</h1>
<p>テキストエリアに「 ” 【 などの前括弧類を単体で入力すると、後ろ括弧を自動補完してカーソルを間に置きます</p>
<textarea name="" id="text-area" cols="30" rows="10"></textarea>
<script>
window.addEventListener('DOMContentLoaded', function () {
const input_element = document.getElementById('text-area');
// 入力終了時に内容をチェックして置き換える
input_element.addEventListener('compositionend', function (e) {
const data = e.data;
switch (data) {
case "「":
complete_quote(input_element, '」');
break;
case "\”":
replace_quote(input_element, '“”');
break;
case "{":
complete_quote(input_element, '}');
break;
case "『":
complete_quote(input_element, '』');
break;
case "’":
replace_quote(input_element, '‘’');
break;
case "【":
replace_quote(input_element, '】');
break;
case "[":
replace_quote(input_element, ']');
break;
case "(":
replace_quote(input_element, ')');
break;
default:
break;
}
});
//後ろに補完する関数
function complete_quote(element, charactor) {
const content = element.value;
const len = content.length;
const pos = element.selectionStart;
element.value = content.substr(0, pos) + charactor + content.substr(pos, len);
element.setSelectionRange(pos, pos);
}
//そっくり入れ替える関数
function replace_quote(element, charactor) {
const content = element.value;
const len = content.length;
const pos = element.selectionStart;
element.value = content.substr(0, pos - 1) + charactor + content.substr(pos, len);
element.setSelectionRange(pos, pos);
}
});
</script>
</body>
</html>
補完と置き換えを使い分け
日本語の場合、キーボードから入力すると後ろ括弧になるものがあります。
例えば「”」や「’」といった全角のクオーテーションです。
これに関しては、前を補完する必要があるので別の関数で処理しています。処理としては、補完ではなくペアに置き換えています。
CodePenで動かしてみました。
See the Pen
Complement Japanese parentheses by Ryoji Kimura (@ryjkmr)
on CodePen.
使ってみた感じは、ちょっと慣れが必要ですがなかなか良いです。
WordPressのエディタでも使いたいなぁ。入力欄のIDが分かればブックマークレットで対応できないかな。
とりあえず「ちょいメモ」に組み込んでみようと思います
-
-
一番使ってる自作アプリ、保存できないメモ「ちょいメモ」
ちょっとテキストを書いたりコピペしたいんだけど、エディタやワープロを立ち上げるのもかったるい。というときにブラウザ上でさくっとメモが取れるWebアプリです。保存機能がないが特徴。単純なコードなので欲しい機能は自分でどんどん追加できます
続きを見る