任意のディレクトリからDropboxのメモファイルを編集
やりたいこと
- Dropboxを利用してメモ(テキストファイル)を各デバイスで共有したい.
- ただし,メモを配置するディレクトリは
Dropbox/Memo
とする. Dropbox/Memo
ディレクトリの位置を意識せず,任意のディレクトリからメモの確認・編集を実行したい(memo
コマンドの開発).
また,今回の開発は以下の記事の続きです.
前回の開発により,memo
コマンドにDropbox/Memo
ディレクトリ下のファイル名が補完されるようになっています.
memo
コマンドの開発
開発手順
以下の処理を実現する.
- memoファイルの一覧を表示
- memoファイルの内容の確認(出力)
- memoファイルの追加
- memoファイルの削除
- memoファイルの編集
作成するコードは前回の開発のfunction memo(){}
内に記述する.
memoファイルの一覧を表示
以下のコマンドでmemoファイルの一覧を出力する.
$ memo
この処理はDropbox/Memo
ディレクトリをls
することで実現する.
コードは以下の通り.
local MEMO_DIR=$HOME"/Dropbox/Memo/" ls $MEMO_DIR
実行結果は以下の通り.ちゃんとファイル名を出力できてる.
memoファイルの内容の確認(出力)
以下のコマンドでDropbox/Memo/memo.txt
ファイルの内容を確認する.
$ memo memo.txt
この処理は,Dropbox/Memo/memo.txt
ファイルをless
することで実現する.
コードは以下の通り.
local MEMO_DIR=$HOME"/Dropbox/Memo/" function less_memo() { local MEMO_NAME=$1 # メモが既に存在する場合,less if [[ -f $MEMO_DIR$MEMO_NAME ]]; then less $MEMO_DIR$MEMO_NAME # メモが存在しない場合,echo で通知 else echo "「memo: "$MEMO_NAME"」は存在しません." fi } less_memo $1
実行結果は省略.
memoファイルの追加
以下のコマンドでDropbox/Memo/tmp2.txt
ファイルを作成する.
$ memo -a tmp2.txt
この処理は,Dropbox/Memo/tmp2.txt
ファイルをtouch
することで実現する.
コードは以下の通り.
function add_new_memo() { local MEMO_NAME=$1 # メモが既に存在する場合,echo で通知 if [[ -f $MEMO_DIR$MEMO_NAME ]]; then echo "「memo: "$MEMO_NAME"」は既に作成済みです." # メモを新規作成 else touch $MEMO_DIR$MEMO_NAME echo "「memo: "$MEMO_NAME"」を新規作成しました." fi } case $1 in # メモを新規作成 '-a' ) add_new_memo $2 ;; # 第1引数に関するエラー処理 * ) echo "error: オプションが適切ではありません." ;; esac
実行結果は以下の通り.
memoファイルの削除
以下のコマンドでDropbox/Memo/tmp2.txt
ファイルを削除する.
$ memo -r tmp2.txt
この処理は,Dropbox/Memo/tmp2.txt
ファイルをrm
することで実現する.
コードは以下の通り.
function remove_memo() { local MEMO_NAME=$1 # メモを削除 if [[ -f $MEMO_DIR$MEMO_NAME ]]; then rm $MEMO_DIR$MEMO_NAME echo "「memo: "$MEMO_NAME"」を削除しました." # メモが存在しない場合,echo で通知 else echo "「memo: "$MEMO_NAME"」は存在しません." fi } case $1 in # メモを新規作成 '-a' ) add_new_memo $2 ;; # メモを削除 '-r' ) remove_memo $2 ;; # 第1引数に関するエラー処理 * ) echo "error: オプションが適切ではありません." ;; esac
実行結果は以下の通り.
memoファイルの編集
以下のコマンドでDropbox/Memo/memo.txt
ファイルを編集する.
$ memo -e memo.txt
コードは以下の通り.
function edit_memo() { local MEMO_NAME=$1 # 規定のエディタを設定していれば,そのエディタを使用 # 規定のエディタを設定していなければ, vim を使用 if [[ -z "$EDITOR" ]]; then local DEF_EDITOR='vim' else local DEF_EDITOR=$EDITOR fi # メモを編集 if [[ -f $MEMO_DIR$MEMO_NAME ]]; then $DEF_EDITOR $MEMO_DIR$MEMO_NAME # メモが存在しない場合,echo で通知 else echo "「memo: "$MEMO_NAME"」は存在しません." fi } case $1 in # メモを新規作成 '-a' ) add_new_memo $2 ;; # メモを削除 '-r' ) remove_memo $2 ;; # メモを編集 '-e' ) edit_memo $2 ;; # 第1引数に関するエラー処理 * ) echo "error: オプションが適切ではありません." ;; esac
実行結果は省略.
今回着手していない部分
今回でとりあえずmemoファイルの操作が一通りできたと思うが,実際に使っていかないと,ちゃんとできているのかわからない.
ただ,補完周りで,以下の内容は課題として残る.
- memoファイルを
.txt
を意識せず,操作できるようにする. memo
コマンドを入力する際,入力している引数(番目)に応じて補完内容を変える.例えば,1つ目の引数を入力する際,「-a, -r, -e」が補完で出るようにする.(また,それぞれの内容を表示する.)
ソースコード全体
#!/usr/local/bin/zsh function memo() { local MEMO_DIR=$HOME"/Dropbox/Memo/" # 選択したメモを less する関数 function less_memo() { local MEMO_NAME=$1 # メモが既に存在する場合,less if [[ -f $MEMO_DIR$MEMO_NAME ]]; then less $MEMO_DIR$MEMO_NAME # メモが存在しない場合,echo で通知 else echo "「memo: "$MEMO_NAME"」は存在しません." fi } # メモを新規作成する関数 function add_new_memo() { local MEMO_NAME=$1 # メモが既に存在する場合,echo で通知 if [[ -f $MEMO_DIR$MEMO_NAME ]]; then echo "「memo: "$MEMO_NAME"」は既に作成済みです." # メモを新規作成 else touch $MEMO_DIR$MEMO_NAME echo "「memo: "$MEMO_NAME"」を新規作成しました." fi } # メモを削除する関数 function remove_memo() { local MEMO_NAME=$1 # メモを削除 if [[ -f $MEMO_DIR$MEMO_NAME ]]; then rm $MEMO_DIR$MEMO_NAME echo "「memo: "$MEMO_NAME"」を削除しました." # メモが存在しない場合,echo で通知 else echo "「memo: "$MEMO_NAME"」は存在しません." fi } # メモを編集する関数 function edit_memo() { local MEMO_NAME=$1 # 規定のエディタを設定していれば,そのエディタを使用 # 規定のエディタを設定していなければ,vim を使用 if [[ -z "$EDITOR" ]]; then local DEF_EDITOR='vim' else local DEF_EDITOR=$EDITOR fi # メモを編集 if [[ -f $MEMO_DIR$MEMO_NAME ]]; then $DEF_EDITOR $MEMO_DIR$MEMO_NAME # メモが存在しない場合,echo で通知 else echo "「memo: "$MEMO_NAME"」は存在しません." fi } # 引数がなければメモの一覧を表示 if [[ $# -eq 0 ]]; then ls $MEMO_DIR # 引数の数が1であれば,メモ(第一引数)の中身を less elif [[ $# -eq 1 ]]; then less_memo $1 # 引数の数が2であれば,オプションに応じた処理を実行 elif [[ $# -eq 2 ]]; then case $1 in # メモを新規作成 '-a' ) add_new_memo $2 ;; # メモを削除 '-r' ) remove_memo $2 ;; # メモを編集 '-e' ) edit_memo $2 ;; # 第1引数に関するエラー処理 * ) echo "error: オプションが適切ではありません." ;; esac # 引数の数が (0 ~ 2) でなければエラーを出力 else echo 'error: 引数の数が適切ではありません.' fi } _memo() { _values "description of completion" $(ls ~/Dropbox/Memo) } compdef _memo memo