自転車または神経細胞の保存方法

ハブロフスク市民へのご挨拶!



私のメインデスクトップがUbuntuで作業してから半年が経ちました。Linuxの長所と短所については書きません。投稿はそれについてではありません。

だから...私は残念ながらブラインドタイピング方法を持っていません、そして私が約5年間使用したwindows PuntoSwitcherプログラムが私を非常に忍耐強く救いましたが、UbuntuのXneur対応は軽度に動作しなかったので、学習する意味がありませんでしたSkypeではまったく機能しませんでした。



私はしばらくこれを我慢して、Javaで小さなプログラムを書くことに失敗しました。



プログラム要件:



  1. クイックスタート
  2. アプリケーションを終了して変換をキャンセルするトレイアイコン
  3. グローバルショートカット変換




-これは、PuntoSwitcherで使用した機能です。



画像





そして今夜、文字通り、私は他の方法でshを使用することにしました。



私は普遍的であるふりをしませんが、Kubuntu 15.10では、それが正常に機能します。



動作原理:



  1. スクリプトのshショートカットにショートカットがかかっています
  2. xclipで開始した後、選択したテキストを取得します
  3. 反対のレイアウトに変換する
  4. xdotoolユーティリティを使用して、選択したテキストの代わりに新しいテキストを挿入します
  5. 入力を続けるために、レイアウトを反対に変更します。




言葉から行動へ:

#!/bin/bash oldtemp=`xclip -o` #  temp=`'/home/username/desktop/switch' "$oldtemp"` #  xdotool keydown Shift+Control_L #  sleep 1 xdotool keyup Shift+Control_L xdotool type "$temp" #   notify-send "$oldtemp -> $temp" -t 2000 #      () exit 0
      
      







xdotool keydown / xdotool keyupはxdotoolキーの代わりに使用されました。



テキスト変換について説明します。

これを行うために、テキストを受け取り、変換方法を理解し、すでに通常のテキストをコンソールに送信するC ++で書かれた別のプログラムを使用することにしました。



それ以前は、C ++で記述する必要はありませんでした。このユーティリティの機能の利点は「Hello world」レベルにあります。



弱いメンタリティを持つ妊娠中の子供は見ていません
 #include <iostream> using namespace std; std::string Toreplace(std::string text, std::string s, std::string d){ for(int index=0; index=text.find(s, index), index!=std::string::npos;) { text.replace(index, s.length(), d); index+=d.length(); } return text; } int GetCurentLang(std::string str){ int thislang = 0; const char *cstr = str.c_str(); std::string russtr[66] = {"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""}; std::string engstr[56] = {"q","w","e","r","t","y","u","i","o","p","[","]","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m","<",">","Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"}; for (int i = 0; i < str.length() && thislang == 0; i++){ for (int a = 0; a < 66; a++){ if (russtr[a].compare(new char (cstr[i])) == true) { thislang = 1; } } for (int a = 0; a < 56; a++){ if (engstr[a].compare(new char (cstr[i])) == true) { thislang = 2; } } } return thislang; } std::string TranslateToRu(std::string str){ std::string translate = str; std::string replacein[67] = {"q","w","e","r","t","y","u","i","o","p","[","]","a","s","d","f","g","h","j","k","l",";","'","z","x","c","v","b","n","m",",",".","/","Q","W","E","R","T","Y","U","I","O","P","[","]","A","S","D","F","G","H","J","K","L",";","'","Z","X","C","V","B","N","M",",",".","/","&"}; std::string replaceto[67] = {"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",".","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",".","?"}; for (int i = 0; i < 67; i++){ translate = Toreplace(translate, replacein[i], replaceto[i]); } return translate; } std::string TranslateToEng(std::string str){ std::string translate = str; std::string replacein[67] = {"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",".","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",".","?"}; std::string replaceto[67] = {"q","w","e","r","t","y","u","i","o","p","[","]","a","s","d","f","g","h","j","k","l",";","'","z","x","c","v","b","n","m",",",".","/","Q","W","E","R","T","Y","U","I","O","P","[","]","A","S","D","F","G","H","J","K","L",";","'","Z","X","C","V","B","N","M","<",">","/","&"}; for (int i = 0; i < 67; i++){ translate = Toreplace(translate, replacein[i], replaceto[i]); } return translate; } int main(int argc, char *argv[]) { std::string translate; int currentlang = GetCurentLang(argv[1]); if (currentlang == 2){ translate = TranslateToRu(argv[1]); }else if (currentlang == 1){ translate = TranslateToEng(argv[1]); }else{ translate = ""; } cout << translate << endl; return 0; }
      
      









GetCurentLangテキスト全体を受け入れ、ロシア語または英語のレイアウトの最初の文字を検索します。英語のレイアウトで最初の文字が見つかった場合、すべてをロシア語に翻訳する必要があることを意味します(もちろん文字は無視します)



TranslateToEngTranslateToRuは 、置換をより柔軟に構成するために、それぞれの方向の文字を含む配列です。



なぜstd :: charではなくstring []-C ++で述べたように、私は知りませんが、char []ではキリル文字が収まりません...(またはこのようなもの)



変換が一方向に進行している間、つまり次のように書いた場合:

=djn.









出力では次のようになります。



 <div id='main'>djn</div>
      
      







「djn」も変換することをお勧めしますが、「,. /」などの文字の定義が間違っていると疑問が生じます。

さらに、Ctrl + Aを介して選択されたテキストはxclipに入らないため、代わりに以下を使用する必要があります。



 xdotool keyup Control_L+
      
      






All Articles