右から左の言語に切り替えるときのAtomカーソルの動作の修正

Mohamed Taher Alrefaie

RTL(右から左)言語をサポートするために、テキストエディタであるAtomのデフォルト設定を変更しようとしています。

そのため、クラスではLinesTileComponentdir="rtl" ここに新しい属性を追加しました

これにより、ここに示すように、スクリプト全体が右に切り替わりました。

ここに画像の説明を入力してください

アラビア語を入力するとカーソルが消えます。テキストをクリックしてもカーソルは戻りません(後でGIFで発生します)。行から特定の単語を選択する方法はありません。カーソルは、RTLテキストの後にクリックしたときにのみ左側に表示されます。

I'm suspecting this could be due to the code on cursor.js, cursor.less or in selection.js or others.

I'm struggling with fixing this cursor's behaviour. Are there any specific files or quick fixes that you could help with to fix this issue?

Mohamed Taher Alrefaie

This has been a tough bug to fix. The fix has been submitted for review on Github PR for RTL to check out and contribute to.

ここに画像の説明を入力してください

要約すると、開発者はバイナリ検索アルゴリズムを使用して、ユーザーがクリックした文字を見つけました。二分探索アプローチでは、単語の後半が常に右側にあると想定していました。作業の後半が左側にあるため、これはRTL言語では逆です。修正のプロトタイプを作成した方法の抜粋次に示します。

  let characterIndex = 0;
    {
      let low = 0;
      let high = containingTextNode.length - 1;
      while (low <= high) {
        const charIndex = low + ((high - low) >> 1);
        const nextCharIndex = isPairedCharacter(
          containingTextNode.textContent,
          charIndex
        )
          ? charIndex + 2
          : charIndex + 1;

        const rangeRect = clientRectForRange(
          containingTextNode,
          charIndex,
          nextCharIndex
        );
        if (targetClientLeft < rangeRect.left && !rtl) {
          high = charIndex - 1;
          characterIndex = Math.max(0, charIndex - 1);
        } else if (targetClientLeft > rangeRect.right && !rtl) {
          low = nextCharIndex;
          characterIndex = Math.min(
            containingTextNode.textContent.length,
            nextCharIndex
          );
        } else if (targetClientLeft > rangeRect.right && rtl) {
          high = charIndex - 1;
          characterIndex = Math.max(0, charIndex - 1);
        } else if (targetClientLeft < rangeRect.left && rtl) {
          low = nextCharIndex;
          characterIndex = Math.min(
            containingTextNode.textContent.length,
            nextCharIndex
          );
        } else {
          if (!rtl){
            if (targetClientLeft <= (rangeRect.left + rangeRect.right) / 2) {
              characterIndex = charIndex;
            } else {
              characterIndex = nextCharIndex;
            }
          }else{
            if (targetClientLeft <= (rangeRect.left + rangeRect.right) / 2) {
              characterIndex = nextCharIndex;
            } else {
              characterIndex = charIndex;
            }
          }
          break;
        }
      }
    }

残念ながら、このコードには、RTLとLTRのコンテンツを同じ行で処理するなどのいくつかの機能やその他のマイナーなバグがまだありません。より多くの作業を行う必要があり、コラボレーションが開かれています。このPRに貢献してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

右から左の言語でのカーソルの方向と角かっこが間違っている

分類Dev

右から左の言語でのカーソルの方向と角かっこが間違っている

分類Dev

右から左へのレイアウトに切り替えるときに、ツールバーがカスタムナビゲーションアイコンの矢印を反転しない(アラビア語)

分類Dev

右から左に記述する言語で、左右のcss値を切り替える方法はありますか?

分類Dev

WPML-言語を切り替えるときにカートアイテムデータのカスタムフィールドが更新されない

分類Dev

言語を切り替えるときに現在のページにとどまるHTMLコード

分類Dev

インストール後にWindowsServerのインストール言語を完全に切り替えることはできますか?

分類Dev

PHPで言語を切り替えるときに現在のページにとどまる

分類Dev

PHPで言語を切り替えるときに現在のページにとどまる

分類Dev

電話番号を右から左の言語で左から右に表示する

分類Dev

VRモードの内側または外側にそれぞれ移動するときに、マウスから凝視または凝視からマウスカーソルに切り替えるにはどうすればよいですか?

分類Dev

Javaの右から左への言語

分類Dev

MATE - リストの最後の言語に到達すると、ショートカットを使用した言語切り替えが停止します

分類Dev

Eclipseの右から左への言語(ペルシア語)

分類Dev

Jquery:JqueryUIの並べ替え可能とフクロウのカルーセルを動的に切り替えることはできません

分類Dev

Outlookで右から左の言語で電子メールを表示する

分類Dev

TwinView:配置の切り替え(右/左)

分類Dev

Jqueryを右から左に切り替えることはできません

分類Dev

Javascript文字列が右から左の言語の語順を逆に置き換えるのはなぜですか?

分類Dev

Jupyterでのhtmlタグと右から左への言語のサポート

分類Dev

WPメールキャプチャ-言語の切り替え

分類Dev

MacVim-開いているファイルの言語ショートカットを切り替える

分類Dev

別のメソッドに切り替えるときに配列のNullPointerExceptionを修正する方法

分類Dev

PayPalIPNからPayPalWebhookに切り替えるときに、カスタムフィールドの名前を知っている人はいますか?

分類Dev

Androidの右から左への言語サポート

分類Dev

右から左の言語のためにtesseractを訓練する方法

分類Dev

Railsフォームにデータを入力しながら英語と他の言語を切り替える方法

分類Dev

左から右と右から左の両方の言語のハッシュタグに一致する正規表現

分類Dev

bashのviモードでカーソルの下の単語の大文字と小文字を切り替える方法は?

Related 関連記事

  1. 1

    右から左の言語でのカーソルの方向と角かっこが間違っている

  2. 2

    右から左の言語でのカーソルの方向と角かっこが間違っている

  3. 3

    右から左へのレイアウトに切り替えるときに、ツールバーがカスタムナビゲーションアイコンの矢印を反転しない(アラビア語)

  4. 4

    右から左に記述する言語で、左右のcss値を切り替える方法はありますか?

  5. 5

    WPML-言語を切り替えるときにカートアイテムデータのカスタムフィールドが更新されない

  6. 6

    言語を切り替えるときに現在のページにとどまるHTMLコード

  7. 7

    インストール後にWindowsServerのインストール言語を完全に切り替えることはできますか?

  8. 8

    PHPで言語を切り替えるときに現在のページにとどまる

  9. 9

    PHPで言語を切り替えるときに現在のページにとどまる

  10. 10

    電話番号を右から左の言語で左から右に表示する

  11. 11

    VRモードの内側または外側にそれぞれ移動するときに、マウスから凝視または凝視からマウスカーソルに切り替えるにはどうすればよいですか?

  12. 12

    Javaの右から左への言語

  13. 13

    MATE - リストの最後の言語に到達すると、ショートカットを使用した言語切り替えが停止します

  14. 14

    Eclipseの右から左への言語(ペルシア語)

  15. 15

    Jquery:JqueryUIの並べ替え可能とフクロウのカルーセルを動的に切り替えることはできません

  16. 16

    Outlookで右から左の言語で電子メールを表示する

  17. 17

    TwinView:配置の切り替え(右/左)

  18. 18

    Jqueryを右から左に切り替えることはできません

  19. 19

    Javascript文字列が右から左の言語の語順を逆に置き換えるのはなぜですか?

  20. 20

    Jupyterでのhtmlタグと右から左への言語のサポート

  21. 21

    WPメールキャプチャ-言語の切り替え

  22. 22

    MacVim-開いているファイルの言語ショートカットを切り替える

  23. 23

    別のメソッドに切り替えるときに配列のNullPointerExceptionを修正する方法

  24. 24

    PayPalIPNからPayPalWebhookに切り替えるときに、カスタムフィールドの名前を知っている人はいますか?

  25. 25

    Androidの右から左への言語サポート

  26. 26

    右から左の言語のためにtesseractを訓練する方法

  27. 27

    Railsフォームにデータを入力しながら英語と他の言語を切り替える方法

  28. 28

    左から右と右から左の両方の言語のハッシュタグに一致する正規表現

  29. 29

    bashのviモードでカーソルの下の単語の大文字と小文字を切り替える方法は?

ホットタグ

アーカイブ