在ace编辑器中动态更改文本方向

时间:2018-11-13 10:21:13

标签: ace-editor

我试图根据用户输入的内容在ace编辑器中将文本方向动态更新为“ LTR”或“ RTL”。

我正在听ace编辑器上的change事件,并在经过ace.js之后编写以下代码

scope.editor.session.$bidiHandler.setTextDir(_isNewValueRTL);
scope.editor.session.$bidiHandler.updateBidiMap();

_isNewValueRTL是布尔值。我认为它没有用。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

Ace当前没有setTextDir方法,它支持基于行的方向 https://github.com/ajaxorg/ace/pull/3400通过在行中添加'RIGHT-TO-LEFT EMBEDDING' (U+202B)来起作用

使用包括ext-rtl.js

editor.setOption("rtlText", true)

然后更改光标行调用的方向

<script src=https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ace.js ></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.1/ext-rtl.js ></script>

 
<script>
debugger
editor = ace.edit(null, {
  value: " left\n\u202B right\n\n try press ctrl-alt-shift-r or ctrl-alt-shift-l ",
  rtlText: true,
})
document.body.appendChild(editor.container)
editor.container.style.cssText = "height: 150px; width: 400px; outline: solid"
 
</script>

editor.session.$bidiHandler.setRtlDirection(editor, true)

如果您需要其他功能,请打开功能请求以取得https://github.com/ajaxorg/ace/issues/new的王牌

答案 1 :(得分:0)

尝试将此CSS添加到您的 ace_line

.ace_line {
    direction: ltr;
    unicode-bidi: bidi-override;
}

这可以改变文本的方向