Commit ID: b4fc40c
Bashのバージョン: 5.0.2
コマンドラインにおいて,
$ cat ~.@
ここまで入力した段階で
「-bash: ble-complete/action:tilde/initialize: そのようなファイルやディレクトリはありません」
という警告が際限無く生じます。
Ctrl+Cを押下すると元のコマンドラインに(編集可能な状態で)戻れますが,文字を入力することに関連した操作をしようとすると,再び同じような大量の警告文が表示され,これは非常に厄介です。
私の手元の範囲では,bashやble.shの個人設定に関係なく発生するようです。
すみません…実装忘れです…。手元でテストした時に動いているように見えたのは、bash-completion の同様の機能が動いているだけだったみたいです…。
9fafdb3 実装しました。
個人的なことです
その様に仰っていただけるととても幸せです。定期的に報告していただけるだけでも普段から使ってくださっているという事が察せられるので、それだけでも嬉しく思っています。もし使い物になるという判断でしたら、どうぞ他の知人などにもこんなものもあるよという感じで紹介していただけると幸いです。こちらこそ今年もよろしくお願いいたします!
確認いたしました。ありがとうございます。
ありがとうございます! 閉じますね
@cmplstofB ところで関係ないことですみませんが、最近自己アップデート機能を ble-update 関数として提供したのですが、そちらで問題なく動作しているかどうかをお聞かせいただければ幸いです。もし未だお試しになっていない場合には、(既に現在は最新状態になっていると思いますので) 次に何かしら update がある時に試していただければ幸いです。
自己アップデートについて,了解しました(今まで一度も行なっていませんでした)。
今は孰れの環境のble.shも最新の状態にしてしまっていますので,また次の機会に試してみたいと思います!
少し気になったことで,ble.shのバージョンというのはCommit IDやリリース番号で確認するしかないのでしょうか。$BLE_VERSIONのような変数を用意するなどの予定はありますか。もしかして今現在そういったものが無いのはなにか意図がお有りになるのでしょうか($_ble_base/ble-releaseのような内部用のファイルは一時期あったみたいですが……)。不躾な質問で恐縮ですが,よろしければ教えてもらいたいです。
すみません。version については何も考えていませんでした。特に理由はありませんでした
どのようなものがあると便利そうでしょうか。例えば、
mater ブランチは常に 0.3.alpha なので、細かいバージョンを区別することができません。バージョン番号に関してはセマンティック バージョニング[semver]を採用なさってはいかがでしょうか。もう既に準安定版(v0.1, v0.2)がリリースされているのに,今更それらと非互換なバージョン番号にするのは御法度かもしれないですが。
また,バージョン番号の格納方式については,私はGNU Bashと同様のものにするといいと思います。なぜならble.shを利用しているということは当然GNU Bashを利用しているということで,(もちろん私のように(笑)GNU Bashに不慣れな人間も存在しますが)大抵はGNU Bashの〝作法〟に慣れ親しんでいる筈だからです。
つまり以下のようなものがいいと思います。
$BLE_VERSION$BLE_VERSINFO
$ echo $BLE_VERSINFO[0]
0
$ echo $BLE_VERSINFO[1]
3
$ echo $BLE_VERSINFO[2]
1
$ echo $BLE_VERSINFO[3]
b4fc40c
ありがとうございます。semver 知りませんでした。情報ありがとうございます。確認してみましたが、まあ標準的なバージョンの付け方ですね。一応 ble.sh でも概ねこれに従っていますが、厳密に従うのは 1.0.0 以降にしようと思います (…と思ったら SemVer 第4項にも 0.y.z について書かれていました)。
変数名・内容についてはその方針で実装することにします。
f27a100 確認していただけますか。丁度 ble-update もお試しいただけると幸いです
確認いたしました。実装ありがとうございます!
ble-updateできないですね……。「ble-update: git repository not found」と言われます。
私のble.shの管理方法は,gitを用いてble.sh一式を専用の場所に取得し,「$ make install」とすることで$XDG_DATA_HOME/blesh以下に導入している,という具合です(普通の方法だと思いますが……)。
どうも$_ble_base_repositoryという変数がないようです。
私が考えつく原因としては,非常に古くからgit pull && make installという形でアップデートし続けていたせいかな,とも思います(その際はまだgitリポジトリを変数に格納していなかったので,当然見付からない)。
確認ありがとうございます!
ble-updateできないですね……。「ble-update: git repository not found」と言われます。
其処で引っかかってしまうのですね…
どうも
$_ble_base_repositoryという変数がないようです。
不思議ですね…。ble-update 関数が定義されている時点で _ble_base_repository という変数は存在しているはずなのです…。echo $_ble_base_repository としても空になっているでしょうか。また、インストールされている ble.sh の function update {function ble-update { という行の周囲の内容はどうなっているでしょうか。
インストールされている
ble.shのfunction update {function ble-update {という行の周囲の内容
このような感じです。
# (第302行)
function ble-update {
if ! type git make gawk &>/dev/null; then
local command
for command in git make gawk; do
type "$command" ||
echo "ble-update: '$command' command is not available." >&2
done
return 1
fi
if [[ $_ble_base_repository == release:* ]]; then
local branch=${_ble_base_repository#*:}
( mkdir -p "$_ble_base/src" && cd "$_ble_base/src" &&
git clone https://github.com/akinomyoga/ble.sh "$_ble_base/src/ble.sh" -b "$branch" &&
cd ble.sh && make all && make INSDIR="$_ble_base" install ) &&
source "$_ble_base/ble.sh"
return
fi
if [[ $_ble_base_repository && -d $_ble_base_repository/.git ]]; then
( echo "cd into $_ble_base_repository..." >&2 &&
cd "$_ble_base_repository" &&
git pull && ! make -q && make all &&
if [[ $_ble_base != "$_ble_base_repository"/out ]]; then
make INSDIR="$_ble_base" install
fi ) &&
source "$_ble_base/ble.sh"
return
fi
echo 'ble-update: git repository not found' >&2
return 1
}
話が逸れる上に,偉そうで申し分けないのですが,ble-updateは利用者がコマンドラインにおいて利用するコマンドですので,できれば(ble-bindコマンドのように)--helpという引数などを受け取って簡単な説明などを表示したほうがいいのではないかと思います。
すみません。function ble-update { の上の行はどうなっていますか。
このような感じです。
if ! ble/base/initialize-cache-directory; then
echo "ble.sh: failed to initialize \$_ble_base_cache." 1>&2
return 1
fi
なるほど。。本来は _ble_base_reporitory=... という行が生成されて
if ! ble/base/initialize-cache-directory; then
echo "ble.sh: failed to initialize \$_ble_base_cache." 1>&2
return 1
fi
_ble_base_repository='/home/murase/.local/share/blesh'
function ble-update {
if ! type git make gawk &>/dev/null; then
local command
for command in git make gawk; do
の様になっている筈なのでした。これは行の生成に失敗していますね…。BLE_VERSION に関しても同様に行を生成しているのですが、そちらは正しく動いているということですよね。BLE_VERSION は以下の様に挿入されます。
if [[ $_ble_base ]]; then
if ! ble/base/unload-for-reload &>/dev/null; then
echo "ble.sh: ble.sh seems to be already loaded." >&2
return 1
fi
fi
BLE_VERSION=0.3.0-alpha+f27a100
function ble/base/initialize-version-information {
local version=$BLE_VERSION
local hash=
if [[ $version == *+* ]]; then
versionに関する行の周辺はそちらのコードと全く同じでした。
あの,_ble_base_repositoryという変数は,「ble.shをインストールした場所」ではなく「ble.shをWeb上からローカルに降ろした場所」を表わしているんですよね。
versionに関する行の周辺はそちらのコードと全く同じでした。
うーん。システムによって gawk の振る舞いが異なるという事なのかもしれません…。以下のコマンドの結果を教えていただけないでしょうか。
$ a=b gawk 'BEGIN { c="echo 1:$a:"; while ((c|getline l)>0) print l; exit; }'
$ gawk 'BEGIN { c="a=b; echo 2:$a:"; while ((c|getline l)>0) print l; exit; }'
あの,
_ble_base_repositoryという変数は,「ble.shをインストールした場所」ではなく「ble.shをWeb上からローカルに降ろした場所」を表わしているんですよね。
Webから .tar.xz を落とした時は release:ブランチ名 で、git で入手した場合には make を実行したリポジトリの場所を表しています。
$_ble_base_repository変数gitで入手したble.shをその同じ場所で$ make installしているのですが,多分akinomyoga様の想定の範囲内ですよね……。
$ a=b gawk 'BEGIN { c="echo 1:$a:"; while ((c|getline l)>0) print l; exit; }'
1:b:
$ gawk 'BEGIN { c="a=b; echo 2:$a:"; while ((c|getline l)>0) print l; exit; }'
2:b:
$ gawk --version | head -n 1
GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.1.2)
$_ble_base_repository変数はいそうです。。
申し訳ありませんが、一回 ${makeしているディレクトリ}/out/ble.sh を削除してから再度 make install しても _ble_base_repository が存在しないのか、という事を確かめていただくことは可能でしょうか。
ありがとうございます…。ちゃんと期待通りの動作ですね…。
度々すみません。以下の実行結果はどうでしょう
```console
$ cd ${makeしているディレクトリ}
$ gawk '{ while (($0|getline l)>0) print l; }' <
EOF
生成されませんね……。
ところで,今$ make installした際の出力を見ると,コマンドが失敗している(結局無視されて終了番号0で終わってはいる)ようです。
$ make clean
rm -rf out/ble.sh out/keymap/emacs.sh out/keymap/vi.sh out/keymap/vi_digraph.sh out/keymap/vi_digraph.txt out/keymap/vi_test.sh out/lib/init-term.sh out/lib/init-bind.sh out/lib/core-complete.sh out/lib/core-syntax.sh out/lib/core-edit.ignoreeof-messages.txt out/lib/init-cmap.sh out/lib/vim-surround.sh out/ble.dep
$ make install
DEPENDENCIES_PHONY=1 DEPENDENCIES_OUTPUT=out/ble.dep DEPENDENCIES_TARGET=out/ble.sh \
/usr/bin/gawk -f ext/mwg_pp.awk ble.pp >/dev/null
sh: 1: Bad substitution
bash make_command.sh install "out/ble.sh" "/home/rentaro/share/blesh/ble.sh"
cp -p keymap/emacs.sh out/keymap/emacs.sh
cp -p keymap/vi.sh out/keymap/vi.sh
cp -p keymap/vi_digraph.sh out/keymap/vi_digraph.sh
cp -p keymap/vi_digraph.txt out/keymap/vi_digraph.txt
cp -p keymap/vi_test.sh out/keymap/vi_test.sh
cp -p lib/init-term.sh out/lib/init-term.sh
cp -p lib/init-bind.sh out/lib/init-bind.sh
cp -p lib/core-complete.sh out/lib/core-complete.sh
/usr/bin/gawk -f ext/mwg_pp.awk lib/core-syntax.sh > out/lib/core-syntax.sh
bash make_command.sh install "out/lib/core-syntax.sh" "/home/rentaro/share/blesh/lib/core-syntax.sh"
cp -p lib/core-edit.ignoreeof-messages.txt out/lib/core-edit.ignoreeof-messages.txt
cp -p lib/init-cmap.sh out/lib/init-cmap.sh
cp -p lib/vim-surround.sh out/lib/vim-surround.sh
~/srv/git/github.com/akinomyoga/ble.sh$
$ pwd
/home/XXX/srv/git/github.com/akinomyoga/ble.sh
$ gawk '{ while (($0|getline l)>0) print l; }' <<EOF
pwd=\$(pwd) q=\' Q="'\''"; echo "_ble_base_repository='\${pwd//\$q/\$Q}'"
EOF
sh: 1: Bad substitution
ちなみに直に実行すると↓成功します。
$ pwd=$(pwd) q=\' Q="'\''"; echo "_ble_base_repository='${pwd//\$q/\$Q}'"
_ble_base_repository='/home/rentaro/srv/git/github.com/akinomyoga/ble.sh'
出力を見て思ったのは,GNU Bashでなくsh(僕の環境ではdash)で実行されているのかもしれないですね。
これですね…。${a//b/c} は使えないのでした…。Ubuntu は /bin/sh は dash です。
$ dash -c 'echo ${a//b/c}'
dash: 1: Bad substitution
なるほど……。ちなみに,UbuntuじゃなくてDebian sidを使っています(まあどっちでも殆ど一緒ですが)。
--help 対応ble-sabbrev に修正があります。そちらで git pull && make install して頂いてから、push 致します。その後に ble-update を試していただきたいと考えています。
ble-update,成功しました!(Already up to date.と表示され終了コード1で終了しました)ありがとうございます。
しかし細かいことですが,リポジトリのディレクトリにcd(1)する際,GNU Bash組込みのcd(1)($ builtin cd)でなく利用者が上書き定義したcd(という名前のalias・函数)が使われるのが気になりました。(僕はcdコマンドに色々機能を持たせたものをインタラクティブシェルで使っているのですが,その色々な機能がble-updateを行なうと実行されてしまいます。まあ然程問題ではないのですが,その処理というのがgitリポジトリに関連する処理なので,少し不安なのです)
リポジトリのディレクトリにcd(1)する際,GNU Bash組込みのcd(1)(
$ builtin cd)でなく利用者が上書き定義したcd(という名前のalias・函数)が使われるのが気になりました。
ありがとうございます! 確かにそうですね…
--help 対応で壊れた ble-sabbrev 修正しましたbuiltin cd を使うようにしました更新がある時の ble-update 確認お願いいたしますね。
ありがとうございます。ble-updateによるアップデートも無事実行できました。
ありがとうございます!
Most helpful comment
バージョン番号に関してはセマンティック バージョニング[semver]を採用なさってはいかがでしょうか。もう既に準安定版(v0.1, v0.2)がリリースされているのに,今更それらと非互換なバージョン番号にするのは御法度かもしれないですが。
また,バージョン番号の格納方式については,私はGNU Bashと同様のものにするといいと思います。なぜならble.shを利用しているということは当然GNU Bashを利用しているということで,(もちろん私のように(笑)GNU Bashに不慣れな人間も存在しますが)大抵はGNU Bashの〝作法〟に慣れ親しんでいる筈だからです。
つまり以下のようなものがいいと思います。
$BLE_VERSION$BLE_VERSINFO