差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| pocketterm35 [2026/07/21 07:58] – [日本語入力] araki | pocketterm35 [2026/08/06 00:18] (現在) – [日本語入力] araki | ||
|---|---|---|---|
| 行 53: | 行 53: | ||
| * オールドPCのエミュレータで遊びたい人 | * オールドPCのエミュレータで遊びたい人 | ||
| * 小さなデバイスならどんな苦労もいとわない人 | * 小さなデバイスならどんな苦労もいとわない人 | ||
| + | * 致命傷を恐れずファームウェアを改造する意気込みのある人 | ||
| Linuxのターミナルとviなどのシンプルなエディタで生活できる人、オールドPCのエミュレータで遊びたい人には向いているといえる | Linuxのターミナルとviなどのシンプルなエディタで生活できる人、オールドPCのエミュレータで遊びたい人には向いているといえる | ||
| 行 59: | 行 60: | ||
| その場合でも、Raspberry Piを含むキット((Paspberry Pi4 2GBまたはRaspberry Pi5 1GB))はメモリが少なすぎてLinuxといえどデスクトップ環境を運用するのには向いていないので、Raspberry Piは自分で適切なモデルを買って入れるべきだろう | その場合でも、Raspberry Piを含むキット((Paspberry Pi4 2GBまたはRaspberry Pi5 1GB))はメモリが少なすぎてLinuxといえどデスクトップ環境を運用するのには向いていないので、Raspberry Piは自分で適切なモデルを買って入れるべきだろう | ||
| + | |||
| + | 後述するが、本体側を制御しているRP2040上でCircuitPythonが動作しており、これに手を入れるつもりがあれば、キーマップ周りの不満はある程度解消できるかもしれない | ||
| + | |||
| + | 但し、うっかりな変更を加えると、ファームウェアそのものを再インストールしないと回復不能になる可能性もあるので、その辺をわきまえた人のみが恩恵にあずかることができる | ||
| ==== 向かない人 ==== | ==== 向かない人 ==== | ||
| 行 81: | 行 86: | ||
| 右親指でシフトキーを押して、左親指で他のキーを全部カバーすることになるかと思うが、ちょっと癖が強すぎて泣けてくる | 右親指でシフトキーを押して、左親指で他のキーを全部カバーすることになるかと思うが、ちょっと癖が強すぎて泣けてくる | ||
| + | |||
| + | とはいえ、このデバイスはやる気があれば自分でキーマップを変更することもできるので改造することで満足する使い勝手になるかもしれない | ||
| またサーバとして使用することを考えている場合も全く向いていない | またサーバとして使用することを考えている場合も全く向いていない | ||
| 行 364: | 行 371: | ||
| なお、Raspberry Pi5であっても、ウリの一つであるLLMをONにするとキー入力ができなくなってしまう | なお、Raspberry Pi5であっても、ウリの一つであるLLMをONにするとキー入力ができなくなってしまう | ||
| + | |||
| + | GPUの圧倒的な性能不足だと思われる | ||
| + | |||
| + | AMD Ryzen5 2400Gのような大昔のCPU組込みのGPUでも快適に使用できるのに、この分野ではARMは大きく後れを取っているといわざるを得ない | ||
| 設定画面のAIタブで「ZenZaiを有効化」にチェックを入れたとたんに入力ができなくなるので、試してみるのは自由だが、すぐにこのチェックをOFFにできるようにしておくこと | 設定画面のAIタブで「ZenZaiを有効化」にチェックを入れたとたんに入力ができなくなるので、試してみるのは自由だが、すぐにこのチェックをOFFにできるようにしておくこと | ||
| 行 372: | 行 383: | ||
| なお、ライブ変換は快適に動作する | なお、ライブ変換は快適に動作する | ||
| + | |||
| + | === ログイン時に Waylandから警告が出る === | ||
| + | |||
| + | fcitx5を有効にすると、Waylandから警告のポップアップが、ログイン時に出てくる場合がある | ||
| + | |||
| + | これは変換候補などの表示の制御が fcitx5まかせになっていて、GNOMEシェルの管理下にないためである | ||
| + | |||
| + | gnome-shell-extension-manager をインストールし、extention-managerを起動して、「探す」タブから「Input Method Panel」を探しインストールする | ||
| + | |||
| + | {{ :: | ||
| + | |||
| + | インストールすると、入力時に候補などがポップアップするときに、ポップアップの制御が GNOME shell側になるので、ポップアップが入力にかぶったり、テーマカラーが反映されないなどの問題が解消する | ||
| + | |||
| + | 単純に警告を消すだけなら、他にも方法があるが、Input Method Panelを導入しない理由は見当たらないので、こちらの方法をお勧めする | ||
| ==== Codex ==== | ==== Codex ==== | ||
| 行 600: | 行 625: | ||
| Linuxでも動くMZ800のエミュレータで、2.0.xよりMZ-1500/ | Linuxでも動くMZ800のエミュレータで、2.0.xよりMZ-1500/ | ||
| - | 旧バージョンのようにMZ-700のROMにパッチあてしたものを与えなくても使用可能である | + | ビルトインでROMモニタを持っているので旧バージョンのようにMZ-700のROMにパッチあてしたものを与えなくても使用可能である((本体から吸い出したROMを使う場合はパッチあてが必要。ビルトインのROM込みでMZ-700になっているのであって、あくまでもMZ-800のエミュレータなのだ。なお、ROMのライセンスが正規かどうかは不明。心配なら本体から吸い出したROMにパッチを当てて使えばよい)) |
| ただし、2.0.4-previewの時点では、ビルドはできてもクラッシュする | ただし、2.0.4-previewの時点では、ビルドはできてもクラッシュする | ||
| 行 969: | 行 994: | ||
| なお、この部分は大変に長くなるので[[PocketTerm35のキーマップを変更する]]にまとめる | なお、この部分は大変に長くなるので[[PocketTerm35のキーマップを変更する]]にまとめる | ||
| - | < | ||
| - | |||
| - | スクリーンロックがかかると、CIRCUITPYドライブはアンマウントされてしまうので、万一不具合がある状態だとキー入力ができず、スクリーンロックを解除できず、結果CIRCUITPYを修正できなくなってしまう | ||
| - | |||
| - | なので、スクリーンロックをオフにするか、万一に備えてUSBの外付けキーボードを用意しておくことを推奨する | ||
| - | |||
| - | やりたいことによって、code.pyを修正すれば済むのか、あるいはboot.pyを修正したり、ほかのライブラリをたしたりしないといけないのかが変わってくる | ||
| - | |||
| - | === CIRCUITPYをマウントする === | ||
| - | |||
| - | 実はこの操作は運任せである | ||
| - | |||
| - | まあ、気分はわかるのだが、Waveshareは、boot.pyの中で、disable_usb_drive()しているので、リセットを押してboot.pyが走る前にいい感じのところで再度リセットがかかれば、CIRCUITPYが現れる | ||
| - | |||
| - | この状態を逃さずに、バックアップを作成し作業用のコピーを作成する | ||
| - | |||
| - | なお、CIRCUITPYが出たりでなかったりするのは不便なので、ある程度の作業が終わるまでは、boot.pyから``storage.disable_usb_drive()``の行をコメントアウトしてしまうといいかもしれない | ||
| - | |||
| - | |||
| - | |||
| - | === キーボードが返すことができるキーコードの範囲で我慢する === | ||
| - | |||
| - | 例えば、左シフトであるべき一にTABキーがあって間違って押しちゃうし、大体、右の方のキーとSHIFTを同時押しするのもめんどくさくてやだなあと思っていたとする | ||
| - | |||
| - | このTABを普通におしたらシフト、Fnと押したらTABになるようにしたら便利そうだと思ったら、KEY_MAPという配列を書き換えればいい | ||
| - | |||
| - | 具体的には、KEY_MAPの定義の row 5を下のように書き換えればいい | ||
| - | |||
| - | Keycode.TABをKeycode.SHIFTに、Keycode.SHIFTを Keycode.RIGHT_SHIFTにそれぞれ置き換えただけである | ||
| - | |||
| - | 右シフトをRIGHT_SHIFTにする必要があるかどうかはどうでもいいかもしれないが、これで動作がそのようになる | ||
| - | |||
| - | 改造も小さくて、typoでもしない限りは、問題は起きないだろう | ||
| - | |||
| - | <code python> | ||
| - | [Keycode.SHIFT, | ||
| - | </ | ||
| - | |||
| - | |||
| - | === アクションキーはゲームパッドであるべきだ === | ||
| - | |||
| - | ゲームパッドをHIDデバイスとして追加するのはそれほど難しくもないが、めんどくさくはある | ||
| - | |||
| - | ゲームパッドは非常に多くの種類が存在してるのだが、PocketTerm35 にあるのは、四方向のデジタル方向キーと、A, | ||
| - | |||
| - | 方向キーをD Hatとして実装するのか、アナログスティック((だが0か全開かだけ))として実装するのかは難しいところだが、手元にあったSNES風のパッドがアナログスティック実装していたのでそれに倣うことにする | ||
| - | |||
| - | == ライブラリの準備 == | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | このとき、15行目あたりにある adafruit_hidを hidに変更する | ||
| - | |||
| - | <code python> | ||
| - | from hid import find_device | ||
| - | </ | ||
| - | |||
| - | 本来、CircuitPythonのhidのバンドルライブラリは adafruit_hidなのだが、PocketTerm35のものは hid になっているので、どちらかを変更しないといけないのだが、hidを adafruit_hidにすると code.pyの方に波及するので、ここでは追加ライブラリの hid_gamepad.pyの方を合わせてしまう | ||
| - | |||
| - | == Gamepadデバイスの追加 == | ||
| - | |||
| - | デバイスを追加する作業はboot.py に手を入れる必要がある | ||
| - | |||
| - | ほとんど呪文みたいなものなので、このままコピペすればいいと思う | ||
| - | |||
| - | <file python boot.py> | ||
| - | import usb_hid | ||
| - | |||
| - | # This is only one example of a gamepad report descriptor, | ||
| - | # and may not suit your needs. | ||
| - | GAMEPAD_REPORT_DESCRIPTOR = bytes(( | ||
| - | 0x05, 0x01, # Usage Page (Generic Desktop Ctrls) | ||
| - | 0x09, 0x05, # Usage (Game Pad) | ||
| - | 0xA1, 0x01, # Collection (Application) | ||
| - | 0x85, 0x04, # | ||
| - | 0x05, 0x09, # Usage Page (Button) | ||
| - | 0x19, 0x01, # Usage Minimum (Button 1) | ||
| - | 0x29, 0x0A, # Usage Maximum (Button 10) ... サンプルは16ボタンだが参考にしたSNES風ゲームパッドが10ボタンだったので | ||
| - | 0x15, 0x00, # | ||
| - | 0x25, 0x01, # | ||
| - | 0x75, 0x01, # | ||
| - | 0x95, 0x10, # | ||
| - | 0x81, 0x02, # Input (Data, | ||
| - | 0x05, 0x01, # Usage Page (Generic Desktop Ctrls) | ||
| - | 0x15, 0x81, # | ||
| - | 0x25, 0x7F, # | ||
| - | 0x09, 0x30, # Usage (X) | ||
| - | 0x09, 0x31, # Usage (Y) | ||
| - | 0x09, 0x32, # Usage (Z) | ||
| - | 0x09, 0x35, # Usage (Rz) | ||
| - | 0x75, 0x08, # | ||
| - | 0x95, 0x04, # | ||
| - | 0x81, 0x02, # Input (Data, | ||
| - | 0xC0, # End Collection | ||
| - | )) | ||
| - | |||
| - | gamepad = usb_hid.Device( | ||
| - | report_descriptor=GAMEPAD_REPORT_DESCRIPTOR, | ||
| - | usage_page=0x01, | ||
| - | usage=0x05, | ||
| - | report_ids=(4, | ||
| - | in_report_lengths=(6, | ||
| - | out_report_lengths=(0, | ||
| - | ) | ||
| - | |||
| - | usb_hid.enable( | ||
| - | (usb_hid.Device.KEYBOARD, | ||
| - | | ||
| - | | ||
| - | | ||
| - | ) | ||
| - | </ | ||
| - | |||
| - | == コードを変更する == | ||
| - | |||
| - | PocketTerm35のキーマップは、標準とFnキー押下時の二種類があり、キーマトリックスの配列の形で定義されている | ||
| - | |||
| - | 単純にキーボードのキーコードが返ればいいものであれば、単純にキーコードを書いておけばいいが、何か特別な処理をさせたい場合には、CUSTOM_KEYSに負数のコードを定義し、CUSTOM_KEYS_FUNCTION でマッピングされた関数がキーが押されたときに呼ばれるというような動きになっている | ||
| - | |||
| - | もともとのマッピングではこの動作でも問題はなかったが、ゲームパッド動作を割り当てようと思うと、押しっぱなし(オートリピート)がきかなくなってしまったため、CUSTOM_KEYS_FUNCTIONに関数ではなく、makeとbreakの二つの手続きのペアのタプルを登録できるようにし、キーの処理部でも、タプルが登録されていたら、離す処理を呼び出すように変更した | ||
| - | |||
| - | ここまでの準備をして、code.pyを書き換えた | ||
| - | |||
| - | まず、ゲームパッドを code.pyで扱えるように宣言する | ||
| - | |||
| - | from hid_gamepad import Gamepad と gp = Gamepad(usb_hid.devices) を追加するのがこの部分で必要なことである | ||
| - | |||
| - | <code python> | ||
| - | import usb_hid | ||
| - | from hid.keyboard import Keyboard | ||
| - | from hid.keycode import Keycode | ||
| - | from hid.consumer_control import ConsumerControl | ||
| - | from hid.consumer_control_code import ConsumerControlCode | ||
| - | from hid.keyboard_layout_us import KeyboardLayoutUS | ||
| - | from hid_gamepad import Gamepad | ||
| - | import board | ||
| - | import microcontroller | ||
| - | import digitalio | ||
| - | import time | ||
| - | import pwmio #PWM模块 | ||
| - | |||
| - | |||
| - | bl_pwm_value = 32767 #中间值 | ||
| - | ad_pwm_value = 32767 #中间值 | ||
| - | |||
| - | try: | ||
| - | # Set up a keyboard device. | ||
| - | kbd = Keyboard(usb_hid.devices) | ||
| - | layout = KeyboardLayoutUS(kbd) | ||
| - | consumer_control = ConsumerControl(usb_hid.devices) | ||
| - | gp = Gamepad(usb_hid.devices) | ||
| - | </ | ||
| - | |||
| - | そして、カスタムのキーコード(負数)を追加する | ||
| - | |||
| - | -112以降の " | ||
| - | |||
| - | <code python> | ||
| - | # Define custom function keys using a dictionary | ||
| - | CUSTOM_KEYS = { | ||
| - | # Add more custom keys as needed | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | " | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | そして、カスタムキーが操作されたときに呼び出される処理のマッピングが以下である | ||
| - | |||
| - | マッピングが関数のタプルになっているものは、押されたとき、離されたときの処理で、単純に関数だけが書かれているものは押されたときだけ呼び出される | ||
| - | |||
| - | <code pyhotn> | ||
| - | SPECIAL_KEY_FUNCTIONS = { | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | Keycode.CAPS_LOCK | ||
| - | ConsumerControlCode.SCAN_PREVIOUS_TRACK : scan_previous_track, | ||
| - | ConsumerControlCode.PLAY_PAUSE | ||
| - | ConsumerControlCode.SCAN_NEXT_TRACK | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | CUSTOM_KEYS[" | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | この変更を行ったために、メインループにも手を入れた | ||
| - | |||
| - | <code python> | ||
| - | # Main loop | ||
| - | try: | ||
| - | while True: | ||
| - | current_keys = set(scan_keyboard()) | ||
| - | |||
| - | # Handle keys that were released | ||
| - | for key in previous_keys - current_keys: | ||
| - | if key is not None and key >= 0: | ||
| - | kbd.release(key) | ||
| - | elif key is not None and key in SPECIAL_KEY_FUNCTIONS: | ||
| - | if isinstance(SPECIAL_KEY_FUNCTIONS[key], | ||
| - | (fun_make, fun_break) = SPECIAL_KEY_FUNCTIONS[key] | ||
| - | fun_break() | ||
| - | |||
| - | # Handle keys that are pressed | ||
| - | for key in current_keys - previous_keys: | ||
| - | if key is not None: | ||
| - | if key in SPECIAL_KEY_FUNCTIONS: | ||
| - | if isinstance(SPECIAL_KEY_FUNCTIONS[key], | ||
| - | (fun_make, fun_break) = SPECIAL_KEY_FUNCTIONS[key] | ||
| - | fun_make() | ||
| - | else: | ||
| - | SPECIAL_KEY_FUNCTIONS[key]() | ||
| - | elif key >= 0: # 过滤掉负值键码 | ||
| - | kbd.press(key) | ||
| - | |||
| - | </ | ||
| - | |||
| - | キーマップは以下のようになる | ||
| - | |||
| - | |||
| - | <code python> | ||
| - | # Define the key map for the keyboard matrix | ||
| - | KEY_MAP = [ | ||
| - | #col0 | ||
| - | [CUSTOM_KEYS[" | ||
| - | [Keycode.ONE, | ||
| - | [Keycode.Q, | ||
| - | [Keycode.A, | ||
| - | [Keycode.Z, | ||
| - | [Keycode.SHIFT, | ||
| - | [CUSTOM_KEYS[" | ||
| - | ] | ||
| - | |||
| - | </ | ||
| - | |||
| - | あとは、キーを押したり離したりの処理を書けば完成である | ||
| - | |||
| - | カーソルキーはゲームパッドでもあり、キーボード上のカーソルキーでもあるので、押すと両方に対してコードを送信している | ||
| - | |||
| - | もしこれで何か問題が起きるようであれば、キーマップの方を Keycode.UP_ARROW, | ||
| - | |||
| - | <code python> | ||
| - | def gamepad_press_thumb(): | ||
| - | # A button | ||
| - | gp.press_buttons(2) | ||
| - | |||
| - | def gamepad_release_thumb(): | ||
| - | gp.release_buttons(2) | ||
| - | |||
| - | def gamepad_press_thumb2(): | ||
| - | # B button | ||
| - | gp.press_buttons(3) | ||
| - | |||
| - | def gamepad_release_thumb2(): | ||
| - | gp.release_buttons(3) | ||
| - | |||
| - | def gamepad_press_trigger(): | ||
| - | # X button | ||
| - | gp.press_buttons(1) | ||
| - | |||
| - | def gamepad_release_trigger(): | ||
| - | gp.release_buttons(1) | ||
| - | |||
| - | def gamepad_press_top(): | ||
| - | # Y button | ||
| - | gp.press_buttons(4) | ||
| - | |||
| - | def gamepad_release_top(): | ||
| - | gp.release_buttons(4) | ||
| - | |||
| - | def gamepad_press_top2(): | ||
| - | # L button | ||
| - | gp.press_buttons(5) | ||
| - | |||
| - | def gamepad_release_top2(): | ||
| - | gp.release_buttons(5) | ||
| - | |||
| - | def gamepad_press_pinkie(): | ||
| - | # R button | ||
| - | gp.press_buttons(6) | ||
| - | |||
| - | def gamepad_release_pinkie(): | ||
| - | gp.release_buttons(6) | ||
| - | |||
| - | def gamepad_btn_base3(): | ||
| - | # Select button | ||
| - | gp.click_buttons(9) | ||
| - | |||
| - | def gamepad_btn_base4(): | ||
| - | # Start button | ||
| - | gp.click_buttons(10) | ||
| - | |||
| - | def gamepad_press_up(): | ||
| - | # Send both Gamepad / Keyboard | ||
| - | gp.move_joysticks(x=0, | ||
| - | kbd.press(Keycode.UP_ARROW) | ||
| - | |||
| - | def gamepad_release_up(): | ||
| - | gp.move_joysticks(x=0, | ||
| - | kbd.release(Keycode.UP_ARROW) | ||
| - | |||
| - | def gamepad_press_down(): | ||
| - | # Send both Gamepad / Keyboard | ||
| - | gp.move_joysticks(x=0, | ||
| - | kbd.press(Keycode.DOWN_ARROW) | ||
| - | |||
| - | def gamepad_release_down(): | ||
| - | gp.move_joysticks(x=0, | ||
| - | kbd.release(Keycode.DOWN_ARROW) | ||
| - | |||
| - | def gamepad_press_left(): | ||
| - | # Send both Gamepad / Keyboard | ||
| - | gp.move_joysticks(x=-127, | ||
| - | kbd.press(Keycode.LEFT_ARROW) | ||
| - | |||
| - | def gamepad_release_left(): | ||
| - | gp.move_joysticks(x=0, | ||
| - | kbd.release(Keycode.LEFT_ARROW) | ||
| - | |||
| - | def gamepad_press_right(): | ||
| - | # Send both Gamepad / Keyboard | ||
| - | gp.move_joysticks(x=127, | ||
| - | kbd.press(Keycode.RIGHT_ARROW) | ||
| - | |||
| - | def gamepad_release_right(): | ||
| - | gp.move_joysticks(x=0, | ||
| - | kbd.release(Keycode.RIGHT_ARROW) | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | |||
| - | つまり結局ファームウェアを復元できる状態でないととてもじゃないが怖くていじれないというのが正解だ | ||
| - | |||
| - | だから、code.pyの範囲でできることしかできない | ||
| - | |||
| - | 背面のRESETボタンを押すと、CIRCUITPYというドライブが PocketTerm35上に出てくるので、その中にある code.pyを編集して、もう一回背面のリセットボタンを押すと、更新した code.pyを読み込んでキーボードが起動するので、新しいキーマップで使えるようになるよ | ||
| - | |||
| - | とのこと | ||
| - | |||
| - | が、この「RESETすればCIRCUITPYが見える」というのが曲者だった | ||
| - | |||
| - | PiOSじゃなくてUbuntu26.04LTSだから悪いのか、そもそもそういうものなのか、RESETしたくらいでは何も出てこない | ||
| - | |||
| - | ダブルクリックすると CIRCUITPYかRP2040のファームウェア更新用ドライブのどっちかが見えるので、CIRCUITPYが現れるまで繰り返すしかない | ||
| - | |||
| - | そして、もう一つ問題が | ||
| - | |||
| - | このCIRCUITPYがマウントされた状態では、内蔵キーボードが使えないのだ | ||
| - | |||
| - | 外付けキーボード、またはマウスで操作しなければならない | ||
| - | |||
| - | **なお、必ず、code.pyのオリジナルを保存しておくこと** | ||
| - | |||
| - | 万一やらかしたときに回復できなくなってしまうので、絶対だ | ||
| - | |||
| - | さて、code.pyだが、おおむねキーマトリックスがわかるようにキー定義が置かれている | ||
| - | |||
| - | 但し、キーコードは adafruit hidでカバーされているキーコードしか返せない | ||
| - | |||
| - | なるほど、だから L/ | ||
| - | |||
| - | adafruit hidで定義されているキーコードに、トリガーキーみたいなものはなく、また、ジョイパッドはカバーされていないので、これ以外にやりようがなかったのだろうと推測される | ||
| - | |||
| - | せいぜい、F13-F18のファンクションキーでも割り当てて、本体側のソフトで対応するしかなさそうだ | ||
| - | |||
| - | TABキーを左シフトにして、TABキーはなくして、CTRL+Iで代替するというのもありかもしれない | ||
| - | |||
| - | L/ | ||
| - | |||
| - | 受け付けなくなったからか、CIRCUITPYが読み取り専用でマウントされるようになってしまった | ||
| - | |||
| - | 強制的に RWモードでマウントしなおして保存しておいたオリジナルのcode.pyを書き戻した | ||
| - | |||
| - | <code bash> | ||
| - | $ sudo mount -o remount,rw /dev/sda1 | ||
| - | $ cp -p code.py.orig / | ||
| - | </ | ||
| - | |||
| - | 今のところ、自前のcode.pyはうまく動かない | ||
| - | デバッグなどできればいいのだが、Pythonはインデントなどに強く依存する変態言語なので、見た目大丈夫そうでも実は動かないとかあるので、本当に勘弁してほしい</ | ||