標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

NYAGOS保守日記: 空白文字が含まれたパスの補完とチルダ

補完の際、Windowsでは空白を打ち消す文字の定番が決まってないのでパス全体を引用符で囲む。すると ~\Program Files"~\Program Files" みたいになるが、~ が先頭でなくなってしまうので、 ~ を%USERPROFILE% に変換できなくなってしまう。

かといって、~\"Program Files" だと、引用符の前の \ が " の機能を打ち消すように解釈できてしまう。結局、~"\Program Files" という変態補完になったのが現在の nyagos。

だが、最近「~\Program" "Files\ でもいいんじゃね?」という妙案も浮かんでしまって、どうしたもんかなーとか悩んでいたり

一方で、ファイル名の空白を ⌴(U+2334)で表現して、引数を分割する空白と区別させることは出来ないかなぁ…とか考えている。しかし、⌴ を " " へ置換するタイミングが漏れると、不具合のもと。なかなか難しい

一回、展開関数まで書いたりしたんですけどね:

const AntiSpace="\u2334"

func FromAntiSpace(s string) string {
    var buf strings.Builder
    q := false
    for _,c := range s {
        if c == '"' {
            q = !q
        }
        if c != AntiSpace {
            buf.WriteRune(c)
        }else if q {
            buf.WriteByte(' ')
        }else{
            buf.WriteString(`" "`)
        }
    }
    return buf.String()
}

しかし、仮に、空白を ⌴ に置き換えて、二重引用符で囲まなくてもよくしたとしても、& とか | とか、別の機能文字があったりしたら、結局囲まなくてはいけなかったりするしなぁ…。あんまり意味ないか

ちなみに、nyaos 3000で \Share\Program Filesを補完すると~\"Share\Program Files\" となるなぁ。この時は \" を問題視しなかったのかな、俺