「OS」の版間の差分

提供:senooken JP Wiki
(OS から VM に分離。)
 
(同じ利用者による、間の18版が非表示)
79行目: 79行目:


Wi-FiかUSBで接続する。実務的には困らないはず。
Wi-FiかUSBで接続する。実務的には困らないはず。
==== Saving ====
* [https://www.reddit.com/r/iphone/comments/1dh0z24/low_data_use_browser_for_iphone/ Low data use browser for iPhone : r/iphone]
* [https://note.com/kondofumikazu/n/naadf37a7145d 1Blockerで煩わしい広告とサヨナラ!快適なネットサーフィンを実現する方法|近藤史一]
通信を節約する方法がいくつかある。
# Wi-Fiを使う場合、Wi-Fiのアクセスポイントごとの設定で [Low Data Mode] がある。これをオンにすると節約できる。
# SIMの場合、[Cellular Data Options]-[Low Data Mode] がある。[Low Data Mode]=onにすると、自動更新や写真の動機などのバックグラウンドタスクが停止される。
# ブラウザーのコンテンツブロッカー。例えば、1Blocker。メディアを無効にするカスタムルールで、大幅に節約できる。
## [Advanced customize]-[custom rule]-[new rule]
## .+/Block all type resource=off/
<blockquote>2 番目に、Safari をコンテンツ ブロッカーと一緒に使用することをお勧めします。私は 1Blocker を使用していますが、メディアを無効にするカスタム ルールを作成して、帯域幅を大幅に節約できます。[高度なカスタマイズ]、[カスタム ルール]、[新規ルール] の順に進み、正規表現に.+(ドットとプラス記号はすべての URL に一致します) を入力し、[すべてのタイプのリソースをブロック] をオフに切り替え、画像、フォント、RAW、SVG、メディア、ポップアップをオンに戻します。保存します。これにより、これらの特定のリソース タイプをすべて読み込む要求がグローバルにブロックされ、帯域幅を大幅に節約できます。</blockquote>


=== Sound ===
=== Sound ===
751行目: 766行目:
==== Mouse ====
==== Mouse ====
マウスポインター速度 macデフォルト4/10。
マウスポインター速度 macデフォルト4/10。
===== DiscreteScroll =====
* [http://www.neko.ne.jp/%7Efreewing/software/macos_disable_mouse_wheel_scroll_acceleration/#google_vignette Macのマウスホイールの加速度を無効にして Windowsと同じ動きにする方法、macOSのクソな UI動作仕様を修正 (macOSのマウスホイールのスクロールの加速度の動きにはイラついている人が世界中に大勢居ます)]
* [https://github.com/emreyolcu/discrete-scroll GitHub - emreyolcu/discrete-scroll: Fix for macOS's unnecessary scroll wheel acceleration]
Macのマウスホイールのスクロールは加速度に応じる。高速に動かすと移動量が増える。指が疲れる。
加速度を無視して、Windows同様に一定量の移動にしてくれるのが、DiscreteScroll。


==== Applications ====
==== Applications ====
797行目: 821行目:
値を修正した場合、一度unloadしてからloadする。
値を修正した場合、一度unloadしてからloadする。


== VM ==
== UNIX ==


=== UTM ===
=== Other ===


==== Control ====
==== cron ====


===== Capture =====
===== About =====
[https://docs.getutm.app/basics/controls/ Controls | UTM Documentation]


デフォルトだと、Control-Tabなど、一部のMac本体のホットキーが有効になっている。例えば、Windows側でc-tabを入力できなくて困る。
* [https://ja.wikipedia.org/wiki/Cron cron - Wikipedia]
* [https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/utilities/crontab.html crontab]


4番のボタンまたは、control-optionで、カーソルとキーボードをVMでキャプチャーする。これで入力可能になる。
UNIX系OSのジョブ管理ツール。タスクの定期実行を可能にする。


=== Docker ===
cronの名前は時間を意味するギリシア語chronosに由来する。


==== Network ====
指定した時間に1回だけ実行するなら、atがある。電子メールの送信などで役立つ。
docker network ls
上記コマンドでコンテナーごとのネットワーク識別子を確認できる。コンテナー同士で同一ネットワークにするには、片方のservices.networks:でこのネットワーク識別子を指定する。


==== Compose ====
===== Format =====
phpのアプリサーバー、DBサーバーを一つのイメージで作ることもできるが、別のイメージにして連動させることもできる。別のイメージ・コンテナーにしたほうが、管理しやすい模様。
cronの動作はcrontab (cron table) ファイルで指定する。


docker composeで複数のイメージ・コンテナーを一体に管理できる。その際に、特有の事項がある。
以下の形式になっている。
# ┌───────────── 分(0〜59)
# │ ┌───────────── 時(0〜23)
# │ │ ┌───────────── 日(1〜31)
# │ │ │ ┌───────────── 月(1〜12)JAN-DEC
# │ │ │ │ ┌───────────── 曜日(0〜6〈日〜土〉、一部のシステムでは7も日曜日) SUN-SAT
# │ │ │ │ │
# │ │ │ │ │
# * * * * * [予約するコマンド]
日時部分はいくつか指定方法がある。
**: すべて。
*/n: nごとに実行 (*/5)。
*,: 複数の時間間隔を指定 (1,2,3)
*-: 範囲。
* %: コマンド内の%はエスケープされていないと改行文字に変換され、標準入力としてコマンドに渡される。
ユーザーはcrontab -eで自分の設定ファイルを編集できる。crontabファイルの直接編集は非推奨で、crontabコマンドでの修正が推奨されている。


[https://qiita.com/b-coffin/items/8103583efe3767b6748e PHPのPDOをDockerコンテナ内で使おうとしたところ、"No such file or directory" エラーが発生した話 #docker-compose - Qiita]
ファイルの他に標準入力も受け付ける。


docker composeで一体管理しているコンテナー群は、同一ネットワークに参加する。ホスト名はservice名になる。したがって、例えばアプリサーバーからDBサーバーへのアクセス時には、ホスト名に注意する。
===== Command =====
*編集: crontab -e
*表示: crontab -l
*削除: crontab -r
-u: 実行ユーザー指定。


==== Image ====
オプションを指定しない場合、引数のファイルの内容のcronを実行する。引数がなければ標準入力。


===== PHP =====
既存のcrontabの内容を編集したい場合、方法が2種類ある。
Ref: [https://hub.docker.com/_/php php - Official Image | Docker Hub].


Dockerの公式PHPイメージを使う場合、いくつかPHP関係のライブラリーや拡張モジュールをインストール・設定するための専用コマンドが用意されている。
# crontab -e
RUN pecl install memcached-3.2.0 \
# (crontab -l ; echo ) | crontab: crontab -lで現在のcrontabの内容が出力されるので、これを加工してcrontabに再度流し込む。
&& docker-php-ext-enable memcached
# crontab [file]
peclの拡張機能インストール時はバージョン指定が推奨される。


====== docker-php-ext-install ======
2の方法は融通が利く。crontab [file] でファイルにcrontabの内容を記載しておいて、これをVCSで管理というのも悪くはない。
[https://tech.quartetcom.co.jp/2024/03/12/docker-php-extension/ Docker で PHP 拡張モジュールをインストールする | QUARTETCOM TECH BLOG]


PHP拡張モジュールのインストールと設定を行うヘルパーコマンドが用意されている。--helpで対象拡張モジュール一覧を確認できる。
===== Log =====
$ docker run php:latest docker-php-ext-install --help
/var/log/cron
# .....
Possible values for ext-name:
bcmath bz2 calendar ctype curl dba dl_test dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell random readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlwriter xsl zend_test zip
# .....
PECL以外は一通り使用可能。


====== error ======
[https://askubuntu.com/questions/85558/verify-if-crontab-works cron - Verify if crontab works - Ask Ubuntu]
docker-php-ext-installでインストールする際には、必要な依存関係もセットで指定しないとエラーが出る。
FROM php:7.3.23-apache
RUN apt update
RUN docker-php-ext-install pdo_mysql
RUN apt install -y libbz2-dev && docker-php-ext-install bz2
RUN apt install -y libpng-dev && docker-php-ext-install gd
RUN apt install -y libzip-dev && docker-php-ext-install zip
RUN apt install -y ssl-cert && a2enmod rewrite ssl && a2ensite default-ssl
COPY --from=composer /usr/bin/composer /usr/bin/composer
ヘッダーのあるlib*-devもセットでインストールしておく。


===== phpmyadmin =====
デーモン自体の確認は以下。
Ref: [https://hub.docker.com/_/phpmyadmin?tab=description phpmyadmin - Official Image | Docker Hub].
systemctl status cron
systemctl restart cron
cronへの登録時のコマンドが標準出力を持つ場合、メールでユーザーに内容を送信する。


以下のdocker-compose.ymlを格納しておいて、networksのところをつなげたいやつにあわせる。<syntaxhighlight lang="yaml">
この挙動が鬱陶しいので、cronへの登録時にログを全て破棄するような設定が奨励されることがある。
services:
>/dev/null 2>&1
  phpmyadmin:
[https://qiita.com/onomame/items/71646c5517a39bcd01cc crontabのガイドライン #CentOS - Qiita]
    image: phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_ARBITARY=1
    networks:
      - development_default
        # - wordpress_default
networks:
  wordpress_default:
    external: true
  development_default:
    external: false
</syntaxhighlight>特に重要な環境変数。


* <code>PMA_ARBITRARY</code> - when set to 1 connection to the arbitrary server will be allowed
ただ、全部捨てると失敗時も、いつから失敗しているかの情報も一切わからない。残したほうがいい。
* PMA_HOST: デフォルトはdb。servicesがdb以外なら指定必要。
>>/var/log/log_$(date +\%Y\%m\%d).log 2>&1
* PMA_USER/PMA_PASSWORD=phpmyadminのデフォルトユーザー。これを指定しておくと、自動ログインする。


===== MySQL =====
===== 環境変数 =====
POSIXにあるように、HOME/LOGNAME/PATH/SHELLのみが最低限デフォルト値が用意されていて存在が保証される。


====== import ======
cronの環境変数。
Ref: [https://stackoverflow.com/questions/43880026/import-data-sql-mysql-docker-container Import data.sql MySQL Docker Container - Stack Overflow].
echo '* * * * * env >/tmp/env.log' | crontab
  docker exec -i mysql-container mysql -uuser -ppassword name_db < data.sql
FROM php:7.3.23-apacheのDebian 10の場合。
上記のようなコマンドで取り込む。
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
SHELL=/bin/sh
  PWD=/root
PATHはcommand -p getconf PATHを参照していると思われる。


==== Error ====
cronに登録したコマンドが動作しない理由の一つがPATH。注意する。crontab内では変数の代入などは独自拡張になる。基本は実行するスクリプトファイルか、最後のコマンド実行部分で自分で設定する。


===== connect ENOENT \\.\pipe\errorReporter =====
===== anacron =====
https://github.com/docker/for-win/issues/14080
[https://qiita.com/yuzo_____/items/eca271081a0890ce6dcf システムのcrontab (cronとanacronの違い) #Linux - Qiita]


再起動で直るらしい?
cronの亜種にanacronがある。


インストール時のアカウントの権限があるので、アカウント権限がある状態で再インストールするとOK。
* 遅延実行: サーバーダウンなどでスキップされた処理を、復帰時に実行する。
* 負荷分散: 最小1日単位のスケジュールしかできない代わりに、自動でサーバーの負荷をみて分散実行してくれる。


===== `version` is obsolete =====
===== guide =====
[https://zenn.dev/harpseal/articles/8dc2602ffe3365 【docker compose】警告`version` is obsoleteの解決法]
[https://qiita.com/onomame/items/71646c5517a39bcd01cc crontabのガイドライン #CentOS - Qiita]
$ docker compose up
time="2024-07-02T09:54:45+09:00" level=warning msg="C:\\Users\\senoo_0901\\project\\main\\GASProj\\docker\\docker-compose.yml: `version` is obsolete"
docker compose v2からversion指令は廃止になった。単純に削除すればいい。


==== Other ====
crontabでの実行開始時間は検討が必要。0分と00:00は他のサブシステムの定期タスクの密集時間のことが多いのでここは避けて5分や10分にずらすのが無難。


===== RUN/CMD/ENTRYPOINTの違い =====
== Other ==
[https://www.guri2o1667.work/entry/2021/06/08/%E3%80%90Docker%E3%80%91Dockerfile%E3%81%A7%E8%A8%98%E8%BF%B0%E3%81%99%E3%82%8BRUN%E3%81%A8CMD%E3%81%A8ENTRYPOINT%E3%81%AE%E9%81%95%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6 【Docker】Dockerfileで記述するRUNとCMDとENTRYPOINTの違いについて - 自由気ままに書いちゃおう]
 
Dockerfileでコマンドを実行する指令が複数ある。違いを整理する。
 
* RUN: イメージ作成時=docker build字に実行。ソフトウェアのパッケージインストール、ファイルコピー変更などを行う。
* CMD: コンテナ開始時=docker start、作成時=docker run時に実行される。docker run時のコマンドのデフォルト値。VolumeのバインドはRUN後になるのでCMD/ENTRYPOINTで行う必要がある。
* ENTRYPOINT:  コンテナ開始時=docker start、作成時=docker run時に実行される。docker run時に強制実行。上書き不能。
 
===== 権限設定 =====
[https://web.gnusocial.jp/post/2023/04/02/5760/ Apache HTTP Serverの/var/wwwの権限設定 | GNU social JP Web]
 
[https://devops.stackexchange.com/questions/8872/why-does-chown-not-work-in-run-command-in-docker Why does chown not work in RUN command in Docker? - DevOps Stack Exchange]
 
バインドボリュームする場合、RUNの後にバインドされるからCMDで設定が必要。


[https://helpxlog.com/no-entrypoint-and-cmd-in-dockerfile/ DockerfileにENTRYPOINTもCMDも無い?? | へるぷログ]
=== RDP ===


CMD/ENTRYPOINTを指定しない場合、元イメージのCMD/ENTRYPOINTが実行される模様。apacheだとapache2-foregroundコマンド。
==== VNCとの違い ====
<nowiki>*</nowiki> <nowiki>https://www.routerhosting.com/rdp-vs-vnc-remote-desktop-comparison/</nowiki>


[https://qiita.com/oskamathis/items/6ef1e9765616a9315deb docker-composeでコンテナの初回起動時に特定の処理を行う方法 #Docker - Qiita]
<nowiki>*</nowiki> <nowiki>https://superuser.com/questions/32495/whats-the-difference-between-rdp-vs-vnc</nowiki>


初回起動時に処理をする方法もあるが、一時ファイルを生成するなどするもの。権限設定は毎回実行してもOKなものなので、毎回実行する。
<nowiki>*</nowiki> <nowiki>https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97</nowiki>


[https://github.com/docker-library/php/issues/1142 umask for non-root users not as expected · Issue #1142 · docker-library/php]
<nowiki>*</nowiki> <nowiki>https://ja.wikipedia.org/wiki/Virtual_Network_Computing</nowiki>


/root/.bashrcにumaskを指定する。これがないと、コマンドラインでdocker exec -i で実行した際デフォルトのumask 022でのファイル生成になり、この作業コマンドでログが発生したら、サーバープロセスから追記できない。
<nowiki>*</nowiki> <nowiki>https://ja.wikipedia.org/wiki/Remote_Desktop_Protocol</nowiki>
FROM php:7.3.23-apache
RUN apt update && apt install -y \
      ssl-cert
RUN docker-php-ext-install pdo_mysql
RUN a2enmod rewrite ssl
RUN a2ensite default-ssl
COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV BASH_ENV /root/.bashrc
RUN usermod -aG www-data root \
      && echo "umask 002" >>/root/.bashrc
CMD chgrp -R www-data /var/www && chmod 2775 /var/www \
      && find /var/www -type d -exec chmod 2775 {} \; \
      && find /var/www -type f -exec chmod 0664 {} \; \
      && apache2-foreground
[https://stackoverflow.com/questions/39953327/is-it-possible-to-set-the-default-command-when-the-docker-exec-command-is-run dockerfile - Is it possible to set the default command when the `docker exec` command is run on an already running container? - Stack Overflow]


docker exec実行時は、デフォルト実行されるコマンドはない。[[https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html Bash Startup Files (Bash Reference Manual)]] にあるように、BASH_ENVに指定したファイルを非対話実行でも読み込むのでこれを指定して、常にbash -cで実行する。
RDPは意味を送受信している、VNCは画像を送受信している。扱うデータ量・負荷が違う。


あるいは、BASH_ENVを指定せずに、bash -c 'umask 002; 'で実行する。
教育だとか、サポートなどではVNCが有利。普段の使用ではRDPのほうが有利。


* [https://stackoverflow.com/questions/69233642/why-is-umask-setting-in-dockerfile-not-working docker - Why is umask setting in dockerfile not working? - Stack Overflow]
==== リモートデスクトップ ====
* [https://qiita.com/sotoiwa/items/0a78e392fad1cadb50b0 Libertyコンテナでumaskを変える #Docker - Qiita]
<nowiki>https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop</nowiki>


他に上記にあるように、ENTRYPOINTでumaskを指定する方法がある。が、これは関係ない気がする。chomd 2775 /var/wwwでスティッキーを指定しているから、後続の作成時は自動で2775になっているはずだから。
Ubuntu 19.10でのWindows 10からのリモートデスクトップの手順を整理する。


===== docker runとexec =====
まずxrdp (0.9.9-1) をインストールする。
[https://www.memotansu.jp/docker/852/ docker runとdocker execの違いの解説 | めもたんす]
sudo apt install xrdp
その後、Ubuntuはサインアウト・ログアウトする。


run: イメージ作成・実行。
Windows 10のリモートデスクトップ (mstsc.exe) を実行して、Ubuntuのホスト名やIPアドレスで接続する。


exec: 起動中のイメージで実行。
RDPでのログインユーザーが既にログイン済みだと画面が真っ黒になるらしい。


===== Japanese input/日本語入力 =====
[リモートデスクトップでアクセスしたら真っ黒の画面が表示される問題の解決 \| 人と情報](<nowiki>https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop</nowiki>)


* [https://superuser.com/questions/1551967/what-does-locale-gen-generate-in-linux What does locale-gen generate in Linux? - Super User]
そのほか、ログイン時に認証ダイアログが毎回表示される。これはどうにかしたい。
* [https://qiita.com/kazuyoshikakihara/items/0cf74c11d273b0064c83 Dockerではコンテナのlocaleの再確認を #Docker - Qiita]


OSに日本語のロケールが入っていないのが原因。
それ以外は良好。
 
Debian系の場合。
## For Japanese input.
RUN apt install -y locales
RUN (rm /etc/locale.gen && sed '/# ja_JP.UTF-8 UTF-8/s/# //' >/etc/locale.gen) </etc/locale.gen
RUN locale-gen
ENV LANG=ja_JP.UTF-8
/etc/locale.genのファイルの修正が必要。
 
これで日本語が使用可能になる。
 
== Other ==


=== Keybind ===
=== Keybind ===

2024年11月19日 (火) 11:21時点における最新版

パソコンのOSごとの記録。

iOS

Settings

Keyboard

[Settings]-[General]-[Keyboards] が設定項目。

Gboard

スマホの日本語入力 目からウロコの楽々ワザとは? | NIKKEIリスキリング

iOS版のGboardはAndroid版と異なり機能が劣る。標準キーボードを使ったほうがいいらしい。

Space

ASCII.jp:iPhoneで常に半角スペースを入力できるようにする方法

  • [ALL KEYBOARDS]-[Smart Punctuation]=On: Off推奨。
  • [KANA]-[Smart Fullwidth Space]=On: =Off推奨。

これで常に半角スペース入力になる。

瞬間切替

iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞

英語キーボードで1文字だけ数字や記号を入力したいことがある。

その場合、[数字切替] キーをドラッグしたまま、入力したいキーで離す。すると、数字や記号を1文字だけ入力して、英字モードに戻る。切替の手間が省けて楽。

Other

iPhoneは裏ワザだらけ、英数字と記号を思い通りに入力 スマホ日本語入力再入門(3) - 日本経済新聞

  • [ALL KEYBOARDS]-[Auto-Punctuation/自動大文字入力]=On: Off推奨。英語キーボード切替時に先頭が自動で大文字になる機能。英語圏の人なら便利だが非英語圏なら邪魔。
  • [ALL KEYBOARDS]-[Auto-Correction]=On: Off推奨。一般的な綴でない場合、誤入力と判断され、変換のデフォルトが修正候補になる。
  • [ENGLISH]-["." Shortcut]=On: On推奨。英語キーボードには.がない。これがオンだと、スペースのダブルタップで.を入力できる。

Network

テザリング

出典:

無通信状態が90秒ほどしばらく続くと省電力設計のため、自動的にオフになる。これが困る。Andriodは自動オフにはならない。

いくつか対策がある。

  1. [Personal Hotspot] (インターネット共有) 画面の表示を維持。自動ロックも解除しておく。
  2. USB/Wi-FiではなくBluetooth経由にする。⇢Bluetooth接続はMontary以上で不能。

Bluetooth経由のほうが、範囲が短く、電力消費量も抑えられるので、Bluetoothがよさそう。他にはUSB接続。

Bluetooth接続はできなくなっているので、画面表示か通信しておくしかない。

Instant Hotspot

出典:

Bluetoothでのテザリングはできないものの、類似機能のInstant Hotspotで実現できるらしい。

いくつか条件がある。

  • iPhone/iPadでインターネット共有 (Personal Hotspot) 対応。
  • 全デバイスで同じApple IDでiCloudにログイン。
  • 全デバイスでBluetoothオン。
  • Wi-Fiオン.

[Personal Hotspot]-[Allow Others to Join] をオンにしなくても自分だけ接続できるのが利点。逆にいうとこれくらい。Bluetoothをオンにしないといけないぶん、余計な通信処理が入る。使わなくていい。

Bluetooth

出典:

MacS v12.1 (Monterey) からiOSでのBluetooth接続が不能になった。

Wi-FiかUSBで接続する。実務的には困らないはず。

Saving

通信を節約する方法がいくつかある。

  1. Wi-Fiを使う場合、Wi-Fiのアクセスポイントごとの設定で [Low Data Mode] がある。これをオンにすると節約できる。
  2. SIMの場合、[Cellular Data Options]-[Low Data Mode] がある。[Low Data Mode]=onにすると、自動更新や写真の動機などのバックグラウンドタスクが停止される。
  3. ブラウザーのコンテンツブロッカー。例えば、1Blocker。メディアを無効にするカスタムルールで、大幅に節約できる。
    1. [Advanced customize]-[custom rule]-[new rule]
    2. .+/Block all type resource=off/

2 番目に、Safari をコンテンツ ブロッカーと一緒に使用することをお勧めします。私は 1Blocker を使用していますが、メディアを無効にするカスタム ルールを作成して、帯域幅を大幅に節約できます。[高度なカスタマイズ]、[カスタム ルール]、[新規ルール] の順に進み、正規表現に.+(ドットとプラス記号はすべての URL に一致します) を入力し、[すべてのタイプのリソースをブロック] をオフに切り替え、画像、フォント、RAW、SVG、メディア、ポップアップをオンに戻します。保存します。これにより、これらの特定のリソース タイプをすべて読み込む要求がグローバルにブロックされ、帯域幅を大幅に節約できます。

Sound

出典: iPhoneの音量を調整する - Apple サポート (日本)

音量は左サイドボタンで上下できる。左上のスイッチがマナーモードの切替になっている。消音モードと呼んでいる。

Mail

複数アカウントを使いこなす、iPhoneメールアプリの知られざる便利機能 | 日経クロステック(xTECH)

iPhoneのメールアプリは標準のMailを使うのがよいだろう。K-9がないから。複数アカウントにも対応しているが、設定が若干特殊。アプリ設定からではなく、iOS本体の設定から行う。

App

いくつか必要なアプリがあるので整理する。

Switcher

出典: iPhoneで開いているアプリを切り替える - Apple サポート (日本)

アプリスイッチャーという機能で、現在実行中のアプリを変更可能。Androidはホームの上スワイプ、右ボタンだった。iOSはホームのダブルクリック。

KeePass

パスワード管理アプリ。iOSは別になる。KeePass XCはQtを使っているからビルドできるはずなんだけど。

iOS 向けの Keepass クライアントの備忘録 | hyt adversaria」を見る限り、KeePassiumが良さそう。

Camera/Video

Camera

出典: iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室

iPhoneのデフォルトのカメラは解像度が高すぎて写真のファイルサイズがかなり大きい。変更できない。せいぜいインカメラで撮影するくらい。

LINE Cameraが定番のカメラアプリらしい。こちらは解像度を柔軟に設定できる。

[Settings]-[Saving]-[Resolution]-[Medium] に変更。これでデフォルトの半分になる。

iPhoneのカメラ解像度を変更し写真/動画サイズを軽くする便利技 – 格安SIM初心者教室」はもっと小さい。こちらがいいだろう。

Low Cameraはもっと小さいが、小さすぎて細かい文字が見えなくて困る。調べた。

2024|無音カメラアプリおすすめランキング11選|無料|高画質 | Good!Apps」が参考になった。

Simple Camがよかった。基本はこの1.2MPか0.3MP。外観だけでいいならLowCameraとか。

rank OS name url Free level MP resolution px size KB square 備考
4 iOS LowCamera Very Low 0.05 144x144 25 x
4 iOS LowCamera Low 0.1 360x360 50 x
4 iOS LowCamera Medium 0.2 480x480 100 x 画質が低すぎる。
4 iOS LINE Camera Medium 2 1512x1512 1024 x 画質をもう少し落としたい。
2 iOS 低画質カメラ - 動画のみ。
3 iOS 0.3MPCamera 480x640 - いまいち。正方形がない。
3 iOS 0.3MPCamera 240x320 - いまいち。正方形がない。
3 iOS 0.3MPCamera 120x160 - いまいち。正方形がない。
3 iOS default Photo 12 3024x4032 2300 x
3 iOS default Photo 9 3024x3024 2600 x
3 iOS Capera Max 12 3024x4032 2300 - 正方形がない。
3 iOS Capera FullHD 1920x1080 -
3 iOS Capera HD 1280x720 -
3 iOS Capera VGA 640x720 -
3 iOS Capera CIF 352x288 -
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 192x144 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 352x288 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 480x360 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 640x480 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 960x540 - 正方形がない。
3 iOS Lo-Fi Cam https://apps.apple.com/bz/app/lo-fi-cam/id1607751695 1280x720 - 正方形がない。
5 iOS Simple Cam 0.3 480x480 100 x 必要な範囲を網羅できている。
5 iOS Simple Cam 1.2 960x960 200 x 必要な範囲を網羅できている。
5 iOS Simple Cam 1.9 1200x1200 300 x 必要な範囲を網羅できている。
5 iOS Simple Cam 5 1936x1936 800 x 必要な範囲を網羅できている。
5 iOS Simple Cam 8 2448x2448 1500 x 必要な範囲を網羅できている。
5 iOS Simple Cam 12 x 必要な範囲を網羅できている。
3 iOS MiraCamera 9 3024x3024 2700 x いまいち。
3 iOS Foodie standard 3 1920x1920 1600 x いまいち。
3 iOS SODA standard 3 1920x1920 1800 x いまいち。
2 iOS Pro Camera - x
1 iOS Q Camera x -
1 iOS AutoCam x -
2 iOS SkyCamera 0.8 750x1000 -
2 iOS StageCamHD 1280x720 x
2 iOS StageCamHD 1920x1080 x
2 iOS StageCamHD 3024x3024 x
2 iOS StageCamHD 2592x1936 x
2 iOS StageCamHD 3264x2448 x
2 iOS BeautyPlus x
Video

標準のカメラアプリで正方形の動画の撮影方法。photoで正方形にして、撮影ボタン長押しで正方形で動画撮影可能。右にスライドでモードロックとのこと。

カメラアプリの設定で、 [Preserve Settings]-[Creative Controls] でデフォルト正方形を維持できる。

Record Square Format Videos on iPhone with These Apps

動画撮影アプリのおすすめ人気ランキング【2024年】 | マイベスト

正方形の動画撮影アプリ。

Clips

Apple純正の動画作成ソフト。

Favorite

写真も動画も基本はFILTISTでOK。ただし、ズーム不能なので、ズーム時だけ別アプリを使う。

  • LISTIST=動画・写真=720x720ズームなし。
  • MONOV=動画720x720ズーム。
  • Simple Cam=写真ズーム。

通常はLISTISTで動画も写真も撮影。ズームが必要な場合だけ、MONOV/Simple Cam。

ズーム用を1アプリで対応できればよかったのだが、うまいのがない。LINE Cameraが近かったのだけど、動画が最大30 s。惜しかった。しかたない。

LINE Camera

正方形で写真と動画に対応。サイズも大きすぎない。ズームも対応。ただし、動画は30 sまで。これが惜しい。

QR

Ref: QRコードで開いたWEBサイトの履歴がiPhoneで残らない問題、これで解決 | マイナビニュース.

QRコードを読み取ると、QRコードリーダーアプリ内ブラウザーで開けれて、Safariの履歴に残らない。開いた後に、右下でSafariで開き直すと、タブで開き直せる。基本はすぐ開き直したほうがいい。

いや、標準のQRコードリーダーで開いた後に、Safariで開き直すと、状態が違うのか、吉野家のレシートアンケートなどはエラーになる。サードパーティーアプリを使ったほうがいい。

QRコードアプリおすすめ2選&ランキングTOP10 無料・人気のアプリを編集部が厳選!【2024年】 | iPhone/Androidアプリ - Appliv

QRQRがいい。

Windows

Other

高速スタートアップ

出典:

電源オフにしているのに、バッテリーが何故か減っている。原因は [高速スタートアップ] とのこと。

[コントロールパネル]-[ハードウェアとサウンド]-[電源オプション]-[電源ボタンの動作を選択する]-[現在利用可能ではない設定を変更します]-[シャットダウン設定]-[高速スタートアップを有効にする (推奨)] をオフにする。

勝手にスリープする

システムがすぐにスリープしてしまうのは、「システム無人スリープタイムアウト(System unattended sleep timeout)」機能が働いているためだと考えられる。これは、システムがWOL(Wake On LAN)や何らかのイベントなどで、自発的にスリープから起動した場合、そのまま何も操作せずに放っておくと、一定時間後にまた自動的にスリープ状態に移行するための機能である。

 システム無人スリープのタイムアウトを設定する項目を有効化するには、コマンドプロンプトで以下のpowercfgコマンドを実行すればよい。再起動などは必要なく、[電源オプション]にタイムアウトを設定する項目が表示される。

powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 -ATTRIB_HIDE

これだとダメ。

一応元に戻す。

powercfg -attributes SUB_SLEEP 7bc4a2f9-d8fc-4469-b07b-33eb785aaca0 +ATTRIB_HIDE

Windows10で勝手にスリープになる現象を防ぐための対処法 | TechMemo

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca0

このレジストリーの値を0から2に変更する。

システム無人スリープタイムアウトが表示されるので0にするとなくなる。らしい。

そのほか、ディスプレイの電源を切るのはやはりだめ。パソコンの省エネ機能が働いて、処理が止まる。

Startup

Microsoft TeamsなどOSの起動時に勝手に自動起動するアプリがある。制御する方法がいくつかある。

[設定]-[アプリ]-[スタートアップ] で制御できる。大半はこれで制御できる。

ほかに、Explorerのshell:startupか%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupにショートカットがあると、それでも自動起動する。

録音

Windows10で録音がしたい!ボイスレコーダーを使用した音声の録音方法を解説

プレインストールのボイスレコーダーで録音できる。

Theme

Ref: デスクトップのテーマを変更する方法<Windows 11>|サポート|dynabook(ダイナブック公式).

OSのテーマでデフォルトのライト・ダークが決まる。

[スタート]-[設定]-[個人用設定]

Hardware

Keyboard

Ref: FMV Q&A - [Windows 11 キーを押し続けたときに、同じ文字が連続して入力される速度を調整する方法を教えてください。 - FMVサポート : 富士通パソコン].

[コントロールパネル]-[キーボード]

Mouse

[コントロールパネル]-[マウス]

  • ポインター オプション
    • ポインターの速度を選択する (デフォルト=左から6 (6/11))
    • ☑ポインターを自動的に既定のボタンの上に移動する。
    • ☑Ctrlキーを押すとポインターの位置を表示する。

コントロール パネル\すべてのコントロール パネル項目\コンピューターの簡単操作センター\マウスを使いやすくします

  • マウスポインター

Explorer

[フォルダーオプション]-[表示]

  • ファイルおよびフォルダー
    • ☑チェックボックスを使用して項目を選択する。
    • ファイルとフォルダーの表示
      • ☑隠しファイル、隠しフォルダー、および隠しドライブを表示する。
      • □登録されている拡張子は表示しない

Mac

System

Mouse

マウスポインター速度 macデフォルト4/10。

DiscreteScroll

Macのマウスホイールのスクロールは加速度に応じる。高速に動かすと移動量が増える。指が疲れる。

加速度を無視して、Windows同様に一定量の移動にしてくれるのが、DiscreteScroll。

Applications

Macの実行ファイルは.appファイル。これは/Applicationsに配置されている。Laucnhpadはこのディレクトリー内を表示している模様。

lanchctl

Macでシステム起動時の処理を管理する仕組み。Mac OS 10.10以上で導入されている。

GUIなど、システムグローバルで環境変数を反映させたい場合、ここに登録する必要がある。

plistファイルを作成して、それをlanchctl loadして登録になる。unloadで解除になる。

  • plistのファイルのパスは、主に以下2通り。
    • /Library/LaunchAgents/*****.plist : システム全体で有効になる。
    • ~/Library/LaunchAgents/*****.plist : ログインユーザのみで有効になる。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
  <dict>
  <key>Label</key>
  <string>setenv.M2_HOME</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/launchctl</string>
    <string>setenv</string>
    <string>M2_HOME</string>
    <string>/usr/local/Cellar/maven31/3.1.1/libexec</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceIPC</key>
  <false/>
</dict>
</plist>

上記のような形式。

配置したら、コマンドで即座に反映できる。

launchctl load ~/Library/LaunchAgents/SSLKEYLOGFILE.plist 

値を修正した場合、一度unloadしてからloadする。

UNIX

Other

cron

About

UNIX系OSのジョブ管理ツール。タスクの定期実行を可能にする。

cronの名前は時間を意味するギリシア語chronosに由来する。

指定した時間に1回だけ実行するなら、atがある。電子メールの送信などで役立つ。

Format

cronの動作はcrontab (cron table) ファイルで指定する。

以下の形式になっている。

# ┌───────────── 分(0〜59)
# │ ┌───────────── 時(0〜23)
# │ │ ┌───────────── 日(1〜31)
# │ │ │ ┌───────────── 月(1〜12)JAN-DEC
# │ │ │ │ ┌───────────── 曜日(0〜6〈日〜土〉、一部のシステムでは7も日曜日) SUN-SAT
# │ │ │ │ │
# │ │ │ │ │
# * * * * * [予約するコマンド]

日時部分はいくつか指定方法がある。

    • すべて。
  • /n: nごとに実行 (*/5)。
  • ,: 複数の時間間隔を指定 (1,2,3)
  • -: 範囲。
  • %: コマンド内の%はエスケープされていないと改行文字に変換され、標準入力としてコマンドに渡される。

ユーザーはcrontab -eで自分の設定ファイルを編集できる。crontabファイルの直接編集は非推奨で、crontabコマンドでの修正が推奨されている。

ファイルの他に標準入力も受け付ける。

Command
  • 編集: crontab -e
  • 表示: crontab -l
  • 削除: crontab -r

-u: 実行ユーザー指定。

オプションを指定しない場合、引数のファイルの内容のcronを実行する。引数がなければ標準入力。

既存のcrontabの内容を編集したい場合、方法が2種類ある。

  1. crontab -e
  2. (crontab -l ; echo ) | crontab: crontab -lで現在のcrontabの内容が出力されるので、これを加工してcrontabに再度流し込む。
  3. crontab [file]

2の方法は融通が利く。crontab [file] でファイルにcrontabの内容を記載しておいて、これをVCSで管理というのも悪くはない。

Log

/var/log/cron

cron - Verify if crontab works - Ask Ubuntu

デーモン自体の確認は以下。

systemctl status cron
systemctl restart cron

cronへの登録時のコマンドが標準出力を持つ場合、メールでユーザーに内容を送信する。

この挙動が鬱陶しいので、cronへの登録時にログを全て破棄するような設定が奨励されることがある。

>/dev/null 2>&1

crontabのガイドライン #CentOS - Qiita

ただ、全部捨てると失敗時も、いつから失敗しているかの情報も一切わからない。残したほうがいい。

>>/var/log/log_$(date +\%Y\%m\%d).log 2>&1
環境変数

POSIXにあるように、HOME/LOGNAME/PATH/SHELLのみが最低限デフォルト値が用意されていて存在が保証される。

cronの環境変数。

echo '* * * * * env >/tmp/env.log' | crontab

FROM php:7.3.23-apacheのDebian 10の場合。

HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
SHELL=/bin/sh
PWD=/root

PATHはcommand -p getconf PATHを参照していると思われる。

cronに登録したコマンドが動作しない理由の一つがPATH。注意する。crontab内では変数の代入などは独自拡張になる。基本は実行するスクリプトファイルか、最後のコマンド実行部分で自分で設定する。

anacron

システムのcrontab (cronとanacronの違い) #Linux - Qiita

cronの亜種にanacronがある。

  • 遅延実行: サーバーダウンなどでスキップされた処理を、復帰時に実行する。
  • 負荷分散: 最小1日単位のスケジュールしかできない代わりに、自動でサーバーの負荷をみて分散実行してくれる。
guide

crontabのガイドライン #CentOS - Qiita

crontabでの実行開始時間は検討が必要。0分と00:00は他のサブシステムの定期タスクの密集時間のことが多いのでここは避けて5分や10分にずらすのが無難。

Other

RDP

VNCとの違い

* https://www.routerhosting.com/rdp-vs-vnc-remote-desktop-comparison/

* https://superuser.com/questions/32495/whats-the-difference-between-rdp-vs-vnc

* https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97

* https://ja.wikipedia.org/wiki/Virtual_Network_Computing

* https://ja.wikipedia.org/wiki/Remote_Desktop_Protocol

RDPは意味を送受信している、VNCは画像を送受信している。扱うデータ量・負荷が違う。

教育だとか、サポートなどではVNCが有利。普段の使用ではRDPのほうが有利。

リモートデスクトップ

https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop

Ubuntu 19.10でのWindows 10からのリモートデスクトップの手順を整理する。

まずxrdp (0.9.9-1) をインストールする。

sudo apt install xrdp

その後、Ubuntuはサインアウト・ログアウトする。

Windows 10のリモートデスクトップ (mstsc.exe) を実行して、Ubuntuのホスト名やIPアドレスで接続する。

RDPでのログインユーザーが既にログイン済みだと画面が真っ黒になるらしい。

[リモートデスクトップでアクセスしたら真っ黒の画面が表示される問題の解決 \| 人と情報](https://www.tmp1024.com/articles/solve-black-screen-when-ubuntu-remote-desktop)

そのほか、ログイン時に認証ダイアログが毎回表示される。これはどうにかしたい。

それ以外は良好。

Keybind

App Menu

いわゆる右クリックのコンテキストメニュー。これをショートカットキーで実現する方法一応ある。

Macの場合。「Macの右クリック - Apple サポート (日本)」にあるように、Control-左クリックか、2本指クリック。

上記にあるように、F12でもできるらしい。ただし事前設定が必要。

[System]-[Accessibility]-[Pointer Control]-[Alternate pointer actions]=[on] にする。これでF12で開ける。右側のオプションボタンで変更もできる。

Key code

Mac

Ref: macos - Where can I find a list of Mac virtual key codes? - Stack Overflow.

以下のコマンドで一覧を確認できる (Mac v14.2.1、MacBook Air (M1, 2020)、 JIS配列)。

grep 'kVK_.*=' /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/Headers/Events.h

一覧。

  kVK_ANSI_A                    = 0x00,
  kVK_ANSI_S                    = 0x01,
  kVK_ANSI_D                    = 0x02,
  kVK_ANSI_F                    = 0x03,
  kVK_ANSI_H                    = 0x04,
  kVK_ANSI_G                    = 0x05,
  kVK_ANSI_Z                    = 0x06,
  kVK_ANSI_X                    = 0x07,
  kVK_ANSI_C                    = 0x08,
  kVK_ANSI_V                    = 0x09,
  kVK_ANSI_B                    = 0x0B,
  kVK_ANSI_Q                    = 0x0C,
  kVK_ANSI_W                    = 0x0D,
  kVK_ANSI_E                    = 0x0E,
  kVK_ANSI_R                    = 0x0F,
  kVK_ANSI_Y                    = 0x10,
  kVK_ANSI_T                    = 0x11,
  kVK_ANSI_1                    = 0x12,
  kVK_ANSI_2                    = 0x13,
  kVK_ANSI_3                    = 0x14,
  kVK_ANSI_4                    = 0x15,
  kVK_ANSI_6                    = 0x16,
  kVK_ANSI_5                    = 0x17,
  kVK_ANSI_Equal                = 0x18,
  kVK_ANSI_9                    = 0x19,
  kVK_ANSI_7                    = 0x1A,
  kVK_ANSI_Minus                = 0x1B,
  kVK_ANSI_8                    = 0x1C,
  kVK_ANSI_0                    = 0x1D,
  kVK_ANSI_RightBracket         = 0x1E,
  kVK_ANSI_O                    = 0x1F,
  kVK_ANSI_U                    = 0x20,
  kVK_ANSI_LeftBracket          = 0x21,
  kVK_ANSI_I                    = 0x22,
  kVK_ANSI_P                    = 0x23,
  kVK_ANSI_L                    = 0x25,
  kVK_ANSI_J                    = 0x26,
  kVK_ANSI_Quote                = 0x27,
  kVK_ANSI_K                    = 0x28,
  kVK_ANSI_Semicolon            = 0x29,
  kVK_ANSI_Backslash            = 0x2A,
  kVK_ANSI_Comma                = 0x2B,
  kVK_ANSI_Slash                = 0x2C,
  kVK_ANSI_N                    = 0x2D,
  kVK_ANSI_M                    = 0x2E,
  kVK_ANSI_Period               = 0x2F,
  kVK_ANSI_Grave                = 0x32,
  kVK_ANSI_KeypadDecimal        = 0x41,
  kVK_ANSI_KeypadMultiply       = 0x43,
  kVK_ANSI_KeypadPlus           = 0x45,
  kVK_ANSI_KeypadClear          = 0x47,
  kVK_ANSI_KeypadDivide         = 0x4B,
  kVK_ANSI_KeypadEnter          = 0x4C,
  kVK_ANSI_KeypadMinus          = 0x4E,
  kVK_ANSI_KeypadEquals         = 0x51,
  kVK_ANSI_Keypad0              = 0x52,
  kVK_ANSI_Keypad1              = 0x53,
  kVK_ANSI_Keypad2              = 0x54,
  kVK_ANSI_Keypad3              = 0x55,
  kVK_ANSI_Keypad4              = 0x56,
  kVK_ANSI_Keypad5              = 0x57,
  kVK_ANSI_Keypad6              = 0x58,
  kVK_ANSI_Keypad7              = 0x59,
  kVK_ANSI_Keypad8              = 0x5B,
  kVK_ANSI_Keypad9              = 0x5C
  kVK_Return                    = 0x24,
  kVK_Tab                       = 0x30,
  kVK_Space                     = 0x31,
  kVK_Delete                    = 0x33,
  kVK_Escape                    = 0x35,
  kVK_Command                   = 0x37,
  kVK_Shift                     = 0x38,
  kVK_CapsLock                  = 0x39,
  kVK_Option                    = 0x3A,
  kVK_Control                   = 0x3B,
  kVK_RightCommand              = 0x36,
  kVK_RightShift                = 0x3C,
  kVK_RightOption               = 0x3D,
  kVK_RightControl              = 0x3E,
  kVK_Function                  = 0x3F,
  kVK_F17                       = 0x40,
  kVK_VolumeUp                  = 0x48,
  kVK_VolumeDown                = 0x49,
  kVK_Mute                      = 0x4A,
  kVK_F18                       = 0x4F,
  kVK_F19                       = 0x50,
  kVK_F20                       = 0x5A,
  kVK_F5                        = 0x60,
  kVK_F6                        = 0x61,
  kVK_F7                        = 0x62,
  kVK_F3                        = 0x63,
  kVK_F8                        = 0x64,
  kVK_F9                        = 0x65,
  kVK_F11                       = 0x67,
  kVK_F13                       = 0x69,
  kVK_F16                       = 0x6A,
  kVK_F14                       = 0x6B,
  kVK_F10                       = 0x6D,
  kVK_F12                       = 0x6F,
  kVK_F15                       = 0x71,
  kVK_Help                      = 0x72,
  kVK_Home                      = 0x73,
  kVK_PageUp                    = 0x74,
  kVK_ForwardDelete             = 0x75,
  kVK_F4                        = 0x76,
  kVK_End                       = 0x77,
  kVK_F2                        = 0x78,
  kVK_PageDown                  = 0x79,
  kVK_F1                        = 0x7A,
  kVK_LeftArrow                 = 0x7B,
  kVK_RightArrow                = 0x7C,
  kVK_DownArrow                 = 0x7D,
  kVK_UpArrow                   = 0x7E
  kVK_ISO_Section               = 0x0A
  kVK_JIS_Yen                   = 0x5D,
  kVK_JIS_Underscore            = 0x5E,
  kVK_JIS_KeypadComma           = 0x5F,
  kVK_JIS_Eisu                  = 0x66,
  kVK_JIS_Kana                  = 0x68

Keyhac

About

Mac版はmac_portブランチ。

Mac

Mac版は英語サイト (craftware - Keyhac) からじゃないとダウンロードできないので注意する。

マニュアル: keyhac: User Manual

またWindowsと異なり、exeファイルと同じ場所のconfig.pyを読み込んだりはしてくれない。

$HOME/Library/Application Support/Keyhac/に配置する必要がある。

また、そもそもキーコード自体が異なるので、一部は専用に作る必要がある。

Base

config.py内にconfigure(keymap)関数を定義して、この中で設定を記述していく。

引数のkeymapにはKeymapオブジェクトが渡されるのでこれを操作することで設定する。

    keymap_global = keymap.defineWindowKeymap()

Keymap.defineWindowKeymapでWindowKeymapオブジェクトを返す。このオブジェクトに対してグローバルキーマップを定義していく。

これが基本。

基本的に全部文字列。キーコードを指定する部分は数値も可能だが、10進数の文字列にしておいたほうがいい。

Modifier

keymap.defineModifierで、Shift/Ctrlのように同時押しに意味のあるキー (modifier) を追加できる。

スペースの左右のキーにShift/Ctrl相当の機能をもたせる上で非常に重要。

# ユーザモディファイアキーの定義
keymap.defineModifier( 235, "User0" )

上記の例では235のキーコードにU0のモディファイアキーを設定している。U0はUser0の短縮表記。ただし、Windows専用。短縮表記は使わない方がいい。

Policy
  • スペースの左右のキー (Windows=変換/無変換、Mac=英数/かな) をモディファイアキーに追加。
  • LSS/RSSと表記 (Left Side Space/Right Side Space)
  • Ctrl/Cmd=CCと表記。
  • SpaceはCtrlのワンショットモディファイア。
  • LSS=Shift、RSS=U0、Space=CC。

hjklのVimのキー移動を定義したいから、RSSはU0。これは確定。

U0の操作にShiftを組み合わせたいことがあるからLSS=Shiftがいい。

キーの違いで、Windows/Macで共有と独立部分がある?