2018年11月17日土曜日

M570 Wireless Trackballで仮想デスクトップ切り替え


ロジクールのトラックボールマウスM570で仮想デスクトップ切り替えをできるようにしてみる。



準備


LogicoolサポートからSetPointをダウンロードし、インストール。

タスクを選択 - その他

のドロップダウンリストから、「デスクトップ(右)」「デスクトップ(左)」を選択すればいいのだが、デフォルトの状態ではこれらが出てこない。

設定項目は、

C:\Program Files\Logicool\SetPointP\default.xml

を編集することで調整できる。編集には管理者権限が必要。

default.xml


個々のボタンに応じて、設定項目が異なる。ドロップダウンリストに表示されるアイテムと、各行を照らし合わせて、該当する行を見つけ編集すればいい。
m570の場合、真ん中に2つあるキー(デフォルトでは「進む」「戻る」が割り振られている)に対応するのは、42行目のWindows8OthersTaskGroup。
ここの末尾に「,DesktopRight,DesktopLeft」を付け足せばいい。すなわち

<HandlerSetGroup Name="Windows8OthersTaskGroup" HandlerSetNames="MetroAppMenu,MetroCharms,MetroAppSwitch,MetroStartScreen,MetroShare,MetroSettings,MetroDevices" />



<HandlerSetGroup Name="Windows8OthersTaskGroup" HandlerSetNames="MetroAppMenu,MetroCharms,MetroAppSwitch,MetroStartScreen,MetroShare,MetroSettings,MetroDevices,DesktopRight,DesktopLeft," />

にする。

参考


ロジクールマウスM705tで「デスクトップの表示」と「仮想デスクトップ」切り替えを手に入れた! - daimobi

2018年11月16日金曜日

2018年使用ソフト晒し Windows10 Home 64bit

PVが10万を超えました!(∩´ΦωΦ`)∩にゃーん!
ということでソフトウェアカスタマイズブログ界隈(生き残りいるのか?)では定番(2000年代初頭は)の使用ソフト晒し(死語)です!

ファイル管理




エディタ




ブラウザ


  • kinza (ツリー型にして使用)
    • Checker Plus for Gmai
    • Keepa - Amazon Price Tracker
    • Save to Pocket
    • Search the current site (サイト検索)
    • uBlock Origin
    • その本、図書館にあります。


マルチメディア




ユーティリティーソフト




バックアップ




市販ソフト




感想と分析


以前にやった使用ソフト晒しが2011-06-20とは恐ろしい。
このときよりも、使用ソフトは大幅に減った。今は基本的に、ファイラ、エディタ、ブラウザの3つで完結している。あとはたまに必要になる、個々の機能を持ったソフトをいくつか揃えている、という状態。新しく使うようになったのはNeeViewくらいか。

ブラウザ


ずっとFireFox派だったが、Kinzaに乗り換えている。重くなったり使いづらくなったりしても、ツリー型タブがあるという一点だけでずっと使い続けていたが、Kinzaがツリー化できることに気づき、見捨ててしまった。

ファイラ


2009年にあふから移行して以来、PPxがメインであることは変わっていない。ただその枠内で、1画面にしたり、2画面を試したり、タブを使ってみたりといろいろ変遷してはいる。今は、デスクトップPCは1画面+連動ビュー、サブのt90chiは2画面で使用。
たくさん記事を書いたが、過去の記事は自分でも内容を忘れてしまっているものが多い。以前は、下書きをし、それをプリントアウトして推敲、できる限り無駄を削ぎ落として内容を密にするという暇なことをしてたから、情報量が多すぎて自分でもまともに読めないのだ。カスタマイズの参考にしようと過去の記事をあさることがあっても、何考えてんだこいつと思いながら、疲れて途中で読むのを諦めてしまう。


ランチャ


ランチャについても相当こだわってたはずだが、ここ数年はWin標準の機能しかつかってない。PPxの一行編集をランチャにしだしたのは、ごく最近だ。fenrirは更新しなくなって久しいし、その代替をたまには探すのだが、使い続けたものはなかった。Everythingも、それを頻繁に使うような事態が少なくなり、次第に使わなくなった。
「いかにPCを効率よく使うか」という分野はもっと多くの人が取り組み、洗練されてて然るべきものだと思うんだけど、僕がPCを使いだして以来、それほど発展した気はしていない。

2018年11月13日火曜日

xyzzyでMarkdownの見出しを実装

howmで見出しを実装する際、以前ははてな記法を使ってた。それをMarkdown記法に変えてみる。
以前は「行頭に**を付ける」「行頭に*を付ける」を2つのキーに割り振り、見出し、小見出しの調整を自力でやっていた。今回は、行頭にある文字を判断して行頭に見出しを付けたり、戻したりできるようにした。
Ctrl+:を押すたびに、見出し(## )→小見出し(### )→解除 の順番で切り替わる。

markdown-kihou.l

; -*- Mode: Lisp -*-
;
;;  MarkDown記法の見出しの実装(色づけとキーバインド)
;;
;;  行頭が"##"か"###"ならばその行に色をつける
;;
;;  キーバインド
;;      C-:     行頭に見出しを付けたり、戻したりする
;;              見出し(## )→小見出し(### )→解除 の順番
;;
;;  Installation:
;;
;;      ~/.xyzzy または $XYZZY/site-lisp/siteinit.l に以下のコードを追加
;;
;;              (require "markdown-kihou")


(defun markdown-heading ()
  (interactive "*")
  (save-excursion
    (save-restriction
      (narrow-to-region
       (progn (beginning-of-line) (point))
       (progn (end-of-line) (point)))
      (beginning-of-line)
      (cond
       ((scan-buffer "^[ \t]*### ?" :regexp t) (replace-match ""))
       ((scan-buffer "^[ \t]*## ?" :regexp t) (insert "#"))
       (t (insert "## "))))))

(global-set-key #\C-: 'markdown-heading)

(defvar *text-mode-formats*
  (compile-regexp-keyword-list
   '(
  ("^[=].*" t (:color 14 7 :line :bold ))
     ("^[#][#][#][^*].*" t (:color 7 14 :line ))
     ("^[#][#][^*].*" t (:color 7 4 :line ))
  )
   )
  ) 

(defun my-color-text-mode ()
  (make-local-variable 'regexp-keyword-list)
  (setq regexp-keyword-list *text-mode-formats*)
  )

(setq regexp-keyword-list *text-mode-formats*)
(add-hook 'text-mode-hook 'my-color-text-mode)


参考


xyzzyで現在行をコメントアウトしたり戻したりする設定 - phithonの日記

2018年11月11日日曜日

PPxをランチャとして使う⑨移動・コピー・展開先の選択




PPCで選択したファイルを、一行編集で表示したパスに移動/コピー/展開できるようにする。


準備


一行編集の文字列がフォルダかどうか判別するため、isThisFolder.jsを用意(参考:PPxをランチャとして使う⑥フォルダパスをPPcに投げる)。
また、解凍のために、7zipをインストールし、7zG.jsをScriptフォルダにいれる必要がある(参考:ppxmemo- trash / つかさのほえほえ日記 - 7-zip(7zG.exe)で書庫の展開)。

以下を編集して取込。

K_edit = { ; 一行編集/PPe兼用
^\C ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*ppcfile !copy,%so"name" %: %k"&F4"
^\M ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*ppcfile !move,%so"name" %: %k"&F4"
^\U ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*script %0Script\wrap_7zG.js,"%%a8FCDN",%so"name" %: %k"&F4"
}

やり方



  1. PPCで移動させたいファイルをマーク。一つしかないなら、カーソルを置くだけでいい
  2. 一行編集を起動し、移動先を表示
  3. Ctrl+Shift+Mを押す


コピーや展開も同様。

その他


操作先のソフトでなにか作業をすることを考えれば、一行編集を閉じる処理はいらないかも。
その場合、コマンド実行後、Enterを押して操作先のフォルダに行くか、それが不要ならEscを押して一行編集を閉じることになる。

K_edit = { ; 一行編集/PPe兼用
^\C ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*ppcfile !copy,%so"name"
^\M ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*ppcfile !move,%so"name"
^\U ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*script %0Script\wrap_7zG.js,"%%a8FCDN",%so"name"
}

参考


つかさのほえほえ日記 - PPxとfenrirの連携

これまでの設定まとめ



  • 7zipをインストール
  • PPtrayを起動
  • isThidFolder.jsとisThisFIle.jsをScriptフォルダに作成
  • isThisEmpty.jsをScriptフォルダに作成
  • subdirlist.jsをScriptフォルダに作成
  • 7zG.jsをScriptフォルダに作成
  • ファイルパスをまとめたl_cmd.txtをPPxフォルダに作成
  • フォルダパスをまとめたl_dir.txtをPPxフォルダに作成


X_flst = 3,2 ; エントリ補完結果一覧 0:無 1:有 2:OS版 3~5:動的,0:先頭 1:部分

A_exec = { ; エイリアス
NeeView = D:\bin\NeeView\NeeView.exe
aimp = D:\bin\AIMP4\AIMP.exe
xyzzy = D:\bin\xyzzy\xyzzy.exe
weather = *ppv http://wttr.in/kyoto.png
}

K_tray = { ; PPtrayホットキー(キー指定 不可,V_xx 形式を推奨)
^' ' ,*if %*findwindowtitle("PPlauncher") %: *focus !"PPlauncher" %: *stop
 *string o,name=%"PPlauncher"%eh%E %:
 *if %*script(%0\Script\isThisEmpty.js,%so"name") %: *focus %: *stop
 *if %*script(%0\Script\isThisFolder.js,%so"name") %: *ppc -r %so"name" %: *stop
 *if %*script(%0\Script\isThisFile.js,%so"name") %: *execute,"%so"name"" %: *stop
 *execute,%so"name"
}

K_edit = { ; 一行編集/PPe兼用
^\C ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*ppcfile !copy,%so"name"
^\M ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*ppcfile !move,%so"name"
^\U ,%Os *string o,name=%*edittext %:
 *if !%*script(%0\Script\isThisFolder.js,%so"name") %: *linemessage notfolder %: *stop
 *execute C,*script %0Script\wrap_7zG.js,"%%a8FCDN",%so"name"
^\RIGHT ,%Os *string o,dir=%*edittext %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^\LEFT ,%Os *string o,dir=%*name(D,"%*edittext") %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^W ,*execute ,%Ob browser  "http://google.jp/search?q=%*edittext&ie=utf-8&oe=utf-8" %: %k"&F4"
F12 ,*ppcust %: %k"&F4"
ESC ,%k"&F4"
FIRSTEVENT ,*completelist /set /file:%0l_cmd.txt %: *completelist /set /file:%0l_dir.txt
}

2018年11月9日金曜日

PPxをランチャとして使う⑧Enterで空欄コマンド


入力欄に何も入力せず、Enterを押したときの挙動にコマンドを割り当てる。
「何も入力しない」をどうやって取得するかだが、引数を受け取ったか否かを判別するスクリプトを作り、それに%edittextを引数として与えることで判別する。
ランチャをすべての操作の起点に据える場合、この操作は最速になる。なのでもっとも日常的に使う頻度が高いコマンドを割り当てるべきだろう。僕はPPCをアクティブにする*focusを割り当てている。

以下をScriptフォルダに保存。

isThisEmpty.js

//!*script

// 引数があれば0を。なければ1を返す
if (PPx.Arguments.Length < 1){
  PPx.Result  = 1;
} else {
  PPx.Result  = 0;
}

以下のようにして使う。

*if %*script(%0\Script\isThisEmpty.js,%E) %: *focus %: *stop


これまでの設定まとめ



  • PPtrayを起動
  • isThidFolder.jsとisThisFIle.jsをScriptフォルダに作成
  • isThisEmpty.jsをScriptフォルダに作成
  • subdirlist.jsをScriptフォルダに作成
  • ファイルパスをまとめたl_cmd.txtをPPxフォルダに作成
  • フォルダパスをまとめたl_dir.txtをPPxフォルダに作成


X_flst = 3,2 ; エントリ補完結果一覧 0:無 1:有 2:OS版 3~5:動的,0:先頭 1:部分

A_exec = { ; エイリアス
NeeView = D:\bin\NeeView\NeeView.exe
aimp = D:\bin\AIMP4\AIMP.exe
xyzzy = D:\bin\xyzzy\xyzzy.exe
weather = *ppv http://wttr.in/kyoto.png
}

K_tray = { ; PPtrayホットキー(キー指定 不可,V_xx 形式を推奨)
^' ' ,*if %*findwindowtitle("PPlauncher") %: *focus !"PPlauncher" %: *stop
 *string o,name=%"PPlauncher"%eh%E %:
 *if %*script(%0\Script\isThisEmpty.js,%so"name") %: *focus %: *stop
 *if %*script(%0\Script\isThisFolder.js,%so"name") %: *ppc -r %so"name" %: *stop
 *if %*script(%0\Script\isThisFile.js,%so"name") %: *execute,"%so"name"" %: *stop
 *execute,%so"name"
}

K_edit = { ; 一行編集/PPe兼用
^\RIGHT ,%Os *string o,dir=%*edittext %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^\LEFT ,%Os *string o,dir=%*name(D,"%*edittext") %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^W ,*execute ,%Ob browser  "http://google.jp/search?q=%*edittext&ie=utf-8&oe=utf-8" %: %k"&F4"
F12 ,*ppcust %: %k"&F4"
ESC ,%k"&F4"
FIRSTEVENT ,*completelist /set /file:%0l_cmd.txt %: *completelist /set /file:%0l_dir.txt
}

2018年11月7日水曜日

PPxをランチャとして使う⑦ステップイン・アウト


一行編集内で、ディレクトリパスのサブフォルダに潜ったり、親フォルダに戻ったりできるようにする。
サブフォルダに潜る例。


親フォルダに戻る例。


準備


以下をScriptフォルダに保存。

subdirlist.js

//!*script

// 受け取ったディレクトリのサブディレクトリパスやファイルパスを、ファイルに出力
// 第一引数 : ディレクトリ
// 第二引数 : 出力するファイルパス

// 引数がなければ終了
if (PPx.Arguments.Length < 2){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var pdir = PPx.Arguments(0);
var resultfile = PPx.Arguments(1);
var fso = PPx.CreateObject("Scripting.FileSystemObject");
var dir = fso.GetFolder(pdir);
var folders = new Enumerator(dir.SubFolders);
var files = new Enumerator(dir.Files);
var message = pdir + "\r\n"; // 自パスを追加
for(; !folders.atEnd(); folders.moveNext()){ // サブフォルダを追加
  message += fso.BuildPath(pdir, folders.item().Name) + "\r\n";
}
for(; !files.atEnd(); files.moveNext()){ // ファイルを追加
  var fname = files.item().Name;
  if (fso.GetExtensionName(fname)=="exe"){ // 拡張子がEXEのファイルのみ追加
    message += fso.BuildPath(pdir, fname) + "\r\n";
  }
}

fso.CreateTextFile(resultfile);
// 書き込み
objOutFile = fso.OpenTextFile(resultfile, 2);
objOutFile.Write(message);
objOutFile.Close();

このスクリプトは、引数を2つ与えて使う。

subdirlist.js,ディレクトリパス,テキストファイルパス

とすると、ディレクトリパス、サブフォルダパス、EXEファイルパスをファイルに出力する。こうしてできたテキストファイルを、補完候補リストとして登録すれば、ステップイン・アウトができることになる。

以下を編集して取込。

K_edit = { ; 一行編集/PPe兼用
^\RIGHT ,%Os *string o,dir=%*edittext %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^\LEFT ,%Os *string o,dir=%*name(D,"%*edittext") %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace "" %:
}

操作


  • Ctrl+Shift+←で親フォルダに移動
  • Ctrl+Shift+→でサブフォルダを表示

これまでの設定まとめ


  • PPtrayを起動
  • isThidFolder.jsとisThisFIle.jsをScriptフォルダに作成
  • subdirlist.jsをScriptフォルダに作成
  • ファイルパスをまとめたl_cmd.txtをPPxフォルダに作成
  • フォルダパスをまとめたl_dir.txtをPPxフォルダに作成

X_flst = 3,2 ; エントリ補完結果一覧 0:無 1:有 2:OS版 3~5:動的,0:先頭 1:部分

A_exec = { ; エイリアス
NeeView = D:\bin\NeeView\NeeView.exe
aimp = D:\bin\AIMP4\AIMP.exe
xyzzy = D:\bin\xyzzy\xyzzy.exe
weather = *ppv http://wttr.in/kyoto.png
}

K_tray = { ; PPtrayホットキー(キー指定 不可,V_xx 形式を推奨)
^' ' ,*if %*findwindowtitle("PPlauncher") %: *focus !"PPlauncher" %: *stop
 *string o,name=%"PPlauncher"%eh%E %:
 *if %*script(%0\Script\isThisFolder.js,%so"name") %: *ppc -r %so"name" %: *stop
 *if %*script(%0\Script\isThisFile.js,%so"name") %: *execute,"%so"name"" %: *stop
 *execute,%so"name"
}

K_edit = { ; 一行編集/PPe兼用
^\RIGHT ,%Os *string o,dir=%*edittext %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^\LEFT ,%Os *string o,dir=%*name(D,"%*edittext") %:
 *string o,result=%'temp'%\result.txt %:
 *script %0\Script\subdirlist.js,"%so"dir"","%so"result"" %:
 *completelist /file:"%so"result" %:
 *replace ""
^W ,*execute ,%Ob browser  "http://google.jp/search?q=%*edittext&ie=utf-8&oe=utf-8" %: %k"&F4"
F12 ,*ppcust %: %k"&F4"
ESC ,%k"&F4"
FIRSTEVENT ,*completelist /set /file:%0l_cmd.txt %: *completelist /set /file:%0l_dir.txt
}

2018年11月2日金曜日

PPxをランチャとして使う⑥フォルダパスをPPcに投げる



一行編集に入力された文字列がフォルダパスの場合、それをPPcで開くようにする。

準備


以下の2つのファイルをScriptフォルダに保存。isThisFolder.jsは引数を一つ取り、それが実在するフォルダパスの場合は1を、そうでない場合は0を返すスクリプト。isThisFIle.jsはそれのファイルバージョン。

isThisFolder.js

//!*script

// 引数にとった文字列がフォルダパスかどうかを判別
// フォルダパスなら1を。それ以外なら0を返す
// 第一引数 : 文字列

// 引数がなければ終了
if (PPx.Arguments.Length < 1){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var fso = PPx.CreateObject("Scripting.FileSystemObject");
var file = PPx.Arguments(0);

if(fso.FolderExists(file)){
  PPx.Result  = 1;
} else {
  PPx.Result  = 0;
}

fso = null;

isThisFile.js

//!*script

// 引数にとった文字列がファイルパスかどうかを判別
// ファイルパスなら1を。それ以外なら0を返す
// 第一引数 : 文字列

// 引数がなければ終了
if (PPx.Arguments.Length < 1){
  PPx.SetPopLineMessage("引数が正しくありません。");
  PPx.Quit(-1);
}

var fso = PPx.CreateObject("Scripting.FileSystemObject");
var file = PPx.Arguments(0);

if(fso.FileExists(file)){
  PPx.Result  = 1;
} else {
  PPx.Result  = 0;
}

fso = null;

あとは、以下のコマンドを実行すれば、入力文字列で判別し、PPCでフォルダパスを開いたり、実行したりできる。

*string o,name=%"PPlauncher"%eh%E %:
*if %*script(%0\Script\isThisFolder.js,%so"name") %: *ppc -r %so"name" %: *stop
*if %*script(%0\Script\isThisFile.js,%so"name") %: *execute,"%so"name"" %: *stop
*execute,%so"name"

ディレクトリの登録


フォルダパスを補完リストに登録するやり方は、PPxをランチャとして使う④ファイルパスの補完を参照のこと。
僕は、PPxフォルダに、フォルダパスを羅列したl_dir.txtというファイルを作り、それを読み込ませている。

l_dir.txt

D:\bin
D:\Data
D:\Download
D:\work
D:\Temp
D:\work\Picture
D:\bin\ppx2window64
C:\Users\tukasa\Dropbox\Temp

これをFIRSTEVENTに登録。

K_edit = { ; 一行編集/PPe兼用
FIRSTEVENT ,*completelist /set /file:%0l_dir.txt
}


これまでの設定まとめ


  • PPtrayを起動
  • isThidFolder.jsとisThisFIle.jsをScriptフォルダに作成
  • ファイルパスをまとめたl_cmd.txtをPPxフォルダに作成
  • フォルダパスをまとめたl_dir.txtをPPxフォルダに作成

X_flst = 3,2 ; エントリ補完結果一覧 0:無 1:有 2:OS版 3~5:動的,0:先頭 1:部分

A_exec = { ; エイリアス
NeeView = D:\bin\NeeView\NeeView.exe
aimp = D:\bin\AIMP4\AIMP.exe
xyzzy = D:\bin\xyzzy\xyzzy.exe
weather = *ppv http://wttr.in/kyoto.png
}

K_tray = { ; PPtrayホットキー(キー指定 不可,V_xx 形式を推奨)
^' ' ,*if %*findwindowtitle("PPlauncher") %: *focus !"PPlauncher" %: *stop
 *string o,name=%"PPlauncher"%eh%E %:
 *if %*script(%0\Script\isThisFolder.js,%so"name") %: *ppc -r %so"name" %: *stop
 *if %*script(%0\Script\isThisFile.js,%so"name") %: *execute,"%so"name"" %: *stop
 *execute,%so"name"
}

K_edit = { ; 一行編集/PPe兼用
^W ,*execute ,%Ob browser  "http://google.jp/search?q=%*edittext&ie=utf-8&oe=utf-8" %: %k"&F4"
F12 ,*ppcust %: %k"&F4"
ESC ,%k"&F4"
FIRSTEVENT ,*completelist /set /file:%0l_cmd.txt %: *completelist /set /file:%0l_dir.txt
}

追記 2018/11/06


ファイルパスの実行とエイリアスの実行は、区別する必要ないかと思い、isThisFile.jsとそれに関する設定は省いていた。が、パスに空白が入るときの処理で区別しないとだめなことに気づき、付け足した。