◀一般トップへ
  • 926 設定ファイルの場所を指定する方法
    • 927 Re:設定ファイルの場所を指定する方法
      • 929 Re2:設定ファイルの場所を指定する方法
        • 930 Re3:設定ファイルの場所を指定する方法
          • 931 Re4:設定ファイルの場所を指定する方法
            • 932 Re5:設定ファイルの場所を指定する方法
              • 936 Re6:設定ファイルの場所を指定する方法
                • 937 Re7:設定ファイルの場所を指定する方法
                  • 940 Re8:設定ファイルの場所を指定する方法
                    • 943 Re9:設定ファイルの場所を指定する方法
  • [926] 設定ファイルの場所を指定する方法 tsuyo-pon 2001年12月02日 02:27

    初めまして。サクラエディタをメインのエディタとして使わせていただいています。

    質問あるいは新機能の提案です。
    エディタの設定や MRU などの情報は sakura.exe と同じディレクトリの sakura.ini ファイルから読み込んで、同じファイルに書き出されるわけですが、このファイルの場所をコマンドラインオプションか何かで変更できないでしょうか。
    Windows 2000 で(Power Users でなく) Users グループのメンバとして使っていると、デフォルトでは Program Files の下のファイルには書き込めないのです。
    今はマシンを一人で使っているので sakura.ini を誰でも書き込み可能にして使っているのですが、少し気持ちが悪いです。
    また、複数の人がログオンするような環境だと気持ちが悪い以上の問題が生じると思います。
    設定ファイルの場所が指定できれば、 C:\Documents and Settings\ユーザ名\Application Data\sakura\sakura.ini などに保存すればいいので、便利ではないかと思いました。
    それと、変更履歴を見ていたら、以前はレジストリに書かれていたようですが、やめてしまったのですか? レジストリならマルチユーザ環境でも問題なく使えるのですが……。

    1.2.102.0 を使っています(1.2.103 が出たんですね。早速新しいバージョンを入れてみます)。

    余談: 名前が「テキストエディタ」の頃に人に聞いて、その後新しいバージョンが出ているかを確認していなかったので、久しぶりに調べて名前が変わっていて驚きました。中身を見たら構文ハイライトなどが充実していてもっと驚きましたけど。これからも安心して使える便利なエディタとして成長していってほしいと思います。
    • [927] Re:設定ファイルの場所を指定する方法 げんた 2001年12月02日 05:04

      ▼ tsuyo-ponさん
      > レジストリならマルチユーザ環境でも問題なく使えるのですが……。
      確かにこれらは正論です。しかしレジストリを使うと
      1. レジストリファイルの肥大化を招く
      2. 設定を別のマシンに持っていくのがきわめて面倒。(特に初心者には)
      なので、レジストリ保存は(特にパワーユーザには)嫌われる傾向にあるようです。

      > 今はマシンを一人で使っているので sakura.ini を誰でも書き込み可能にして使っているのですが、少し気持ちが悪いです。
      > 複数の人がログオンするような環境だと気持ちが悪い以上の問題が生じる
      というのも確かにそうなのです。特にWindows XPのユーザをスイッチする環境では設定が選択できないだけではなく、iniファイルの上書き問題が起こります。
      ただ、これらは上に書いた2とは矛盾します。(単なるフォルダコピーでは設定が保存されない)

      ですからこれは選択可能として、たとえばコマンドラインオプションをつけたら個人の設定ファイルで起動するようにするのがよいのでしょうね。
      -Mつけたらマルチユーザ環境としてDocument and settingの個人設定を使うとか。
      ショートカットは共有できるようにするためにもiniのフルパス指定よりはマルチユーザの時だけ
      指定フォルダを見に行く方が好ましいかな。

      ただし、このエディタは初回起動時に設定をメモリに読み込んで2つ目以降のプロセスはそれを利用しますので、異なるオプションで起動しても初回時しか有効にならないことをあらかじめお断りしておきます。
      (両方を混ぜて使うことは無いとは思いますが。)

      なかなか(先週WinXPを初めて使った私にとって)タイムリーな要望ありがとうございました。
      • [929] Re2:設定ファイルの場所を指定する方法 tsuyo-pon 2001年12月02日 12:04

        ▼ げんたさん
        > なので、レジストリ保存は(特にパワーユーザには)嫌われる傾向にあるようです。
        確かに嫌われているなと思っていました。最近はレジストリファイルのサイズが大きくても読み書きが高速になるよう工夫されているとどこかで読んだような気がしますが、気がするだけだし確かめてもいません。
        ini ファイルを運ぶだけで設定が他のマシンにコピーできるというのは魅力的ですね。レジストリだとレジストリの一部をテキストファイルにエクスポートとかするのでしょうけど、ファイルのコピー一発の簡単さにはかないません。レジストリエディタを使うというだけで怖いし。
        まあ、レジストリのファイルが壊れたら被害が大きいというのは変わりませんしね。
        // ただ、某社の PC にプリインストールされた Windows 95 を4年間使っていましたが、レジストリが壊れたことは一度もない……気付いていないだけ?

        > というのも確かにそうなのです。特にWindows XPのユーザをスイッチする環境では設定が選択できないだけではなく、iniファイルの上書き問題が起こります。
        > ただ、これらは上に書いた2とは矛盾します。(単なるフォルダコピーでは設定が保存されない)
        Windows XP は使っていませんし、詳しく調べてもいないのですが、 XP 上だと設定ファイルをコピーしただけでは設定を他のマシンに持っていけないということですか?(単に興味が湧いただけです……面倒なら無視してください)

        > ですからこれは選択可能として、たとえばコマンドラインオプションをつけたら個人の設定ファイルで起動するようにするのがよいのでしょうね。
        > -Mつけたらマルチユーザ環境としてDocument and settingの個人設定を使うとか。
        > ショートカットは共有できるようにするためにもiniのフルパス指定よりはマルチユーザの時だけ
        > 指定フォルダを見に行く方が好ましいかな。
        そうですね。ただし、ショートカットの「リンク先」には環境変数が使えるので、次のように指定すればフルパスを指定する場合でもショートカットの共有はできるようです。
        ・Windows 2000 では "%APPDATA%\sakura.ini" (引用符を含む)と書きます。 XP でもこれでいいと信じたいところです。
        ・Windows NT 4 では "%USERPROFILE%\Application Data\sakura.ini" (引用符を含む)でいいらしいです。環境がないのでよくわかりません。
        ・Windows 9x/Me ではどうなんでしょう。
        ただし、マイドキュメントフォルダと同様、 Application Data フォルダも %USERPROFILE%\Application Data にあるとは限らないので、上の NT 4の場合の方法は問題があるかもしれません。
        べつにフルパスを指定することにこだわるつもりはありませんが、せっかく ini ファイルなのだから、マルチユーザとは無関係に複数の ini ファイルを使い分けられたら新たな利用法があるかな、とか、有用かどうかは別として考えてしまっただけです。 :-)
        (ところで、マイドキュメントフォルダのパスを示す環境変数ってないですよね……なんか中途半端な気がしますが。)

        > なかなか(先週WinXPを初めて使った私にとって)タイムリーな要望ありがとうございました。
        ぼくはまだ Windows XP を使う機会がありません。買うにしても現在使用中のハードウェア環境が XP に対応しているかどうか調べないといけなくて、まだやっていません。
        「○○のソフトが XP でうまく動かない」という話を聞くたびに、面白そうな OS なので使ってみたいと思ってしまいます。 (^_^;)
        • [930] Re3:設定ファイルの場所を指定する方法 げんた 2001年12月02日 13:29

          ▼ tsuyo-ponさん
          > レジストリが壊れたことは一度もない
          私もレジストリが壊れたことはありません。が、HDDの買い換えなどでOSを再インストールしたことは何回かあります。

          > XP 上だと設定ファイルをコピーしただけでは設定を他のマシンに持っていけないということですか?
          設定の移動は従来と変わりません。

          WinXPにはアプリケーションを動かしたままで複数ユーザを切り替える機能があります。サクラエディタでは最終プロセスの終了時に設定をiniに書き出すのですが、複数ユーザが同時にエディタを起動すると先に終了した人の設定が後から終了した設定で上書きされてしまうという問題が起こります。
          エディタをネットワークドライブに置いて複数ユーザが起動する場合に起こる問題が1台のマシンでも起こるということです。

          > ショートカットの「リンク先」には環境変数が使える
          おお!初めて知りました。

          > ・Windows 2000 では "%APPDATA%\sakura.ini" (引用符を含む)と書きます。 XP でもこれでいいと信じたいところです。
          XPでも同じでしたよ。

          ショートカットの設定をインストーラで自動化するのは難しそうですね。
          • [931] Re4:設定ファイルの場所を指定する方法 tsuyo-pon 2001年12月02日 14:32

            ▼ げんたさん
            > WinXPにはアプリケーションを動かしたままで複数ユーザを切り替える機能があります。サクラエディタでは最終プロセスの終了時に設定をiniに書き出すのですが、複数ユーザが同時にエディタを起動すると先に終了した人の設定が後から終了した設定で上書きされてしまうという問題が起こります。
            > エディタをネットワークドライブに置いて複数ユーザが起動する場合に起こる問題が1台のマシンでも起こるということです。
            おや? これは現状なら起きない問題では。
            その代わり、全員が同じ設定で使うという制限がつきますが。でもそれはアプリケーションを動かしたまま切り替えることと直接の関係はありませんよね。 Windows 2000 で1台のマシンを複数の人が使っていれば起きることです。
            それを解決するために、ユーザごとに設定ファイルを分けるというのをご提案したつもりなのですが。
            // ぼくが何か大きく勘違いしているような……。

            ただ、エディタの設定が共有メモリに置かれているなら、その共有メモリをユーザごとに分けておく必要があります。
            ソースを読んでもっと具体的なことを書けるといいのですが、その時間がなくて言いたいことだけ言っています。すみません。

            > ショートカットの設定をインストーラで自動化するのは難しそうですね。
            インストーラに必要な機能は、
            ・設定ファイルをユーザごとに作るかどうかを選べるようにする
            ・(設定ファイル名のフルパスを指定する方式の場合は)作成するショートカットのリンク先を OS の種類ごとに変える
            という2点のように思います。
            でも、インストーラはとくに変更しなくても、設定ファイルをユーザごとに分ける方法が FAQ か何かに書かれていればいいかもしれません。
            // でも、やっぱりげんたさんの書かれたような「設定ファイルをユーザごとに作る」というコマンドラインオプションがあるほうが楽か……。
            • [932] Re5:設定ファイルの場所を指定する方法 げんた 2001年12月02日 16:23

              ▼ tsuyo-ponさん
              > おや? これは現状なら起きない問題では。
              たとえば、
              AさんがEditor起動
              Bさんが同じEditor起動
              Bさんが設定変更
              BさんがEditor終了(ini保存)
              AさんがEditor終了(ini保存)

              とすると、Bさんの設定変更がAさんの設定で上書きされてしまうということです。

              > ただ、エディタの設定が共有メモリに置かれているなら、その共有メモリをユーザごとに分けておく必要があります。
              これは大丈夫なはず。
              Globalとlocal(ユーザごと)の名前空間が用意されていて、GLOBAL\で始まらないものはすべてLocalと解釈されるらしいので。
              • [936] Re6:設定ファイルの場所を指定する方法 tsuyo-pon 2001年12月03日 11:23

                ▼ げんたさん [932]
                > AさんがEditor起動
                > Bさんが同じEditor起動
                > Bさんが設定変更
                > BさんがEditor終了(ini保存)
                > AさんがEditor終了(ini保存)
                なるほど、例えばAさんがファイルタイプ .aaa についての設定を追加し、Bさんがファイルタイプ .bbb についての設定を追加するようなことを考えると、AさんとBさんのサクラエディタを起動している時間に重なりがなければ安全なのに、ユーザ切り替えを使っていると最後に保存されたほうのみが残ることになりますね。

                気になるのは、
                ▼ げんたさん [927]
                > ただし、このエディタは初回起動時に設定をメモリに読み込んで2つ目以降のプロセスはそれを利用しますので、異なるオプションで起動しても初回時しか有効にならないことをあらかじめお断りしておきます。
                という点で、ユーザごとに違う設定ファイルを使うようにしても、初回起動時しか読み込まないのであれば全員が一人目の設定で使うことになってしまうのでは? ということです。

                ただ、
                ▼ げんたさん [932]
                > > ただ、エディタの設定が共有メモリに置かれているなら、その共有メモリをユーザごとに分けておく必要があります。
                > これは大丈夫なはず。
                > Globalとlocal(ユーザごと)の名前空間が用意されていて、GLOBAL\で始まらないものはすべてLocalと解釈されるらしいので。
                とおっしゃった話がぼくにはまだよくわかっていないので、ぼくが思い違いをしているだけなのでしょう。
                「ユーザごと」という単位が存在するということは、現在もマルチユーザ環境に特有の処理が一部行われているということでしょうか。
                設定ファイルが .exe と同じディレクトリの sakura.ini という実装は、シングルユーザ環境のみを考えているからだと思っていたのですが。

                時間ができたら、ソースも見てみますね。
                • [937] Re7:設定ファイルの場所を指定する方法 げんた 2001年12月03日 11:41

                  ▼ tsuyo-ponさん
                  > ユーザごとに違う設定ファイルを使うようにしても、初回起動時しか読み込まないのであれば全員が一人目の設定で使うことになってしまうのでは?

                  > ただ、
                  > ▼ げんたさん [932]
                  > > > ただ、エディタの設定が共有メモリに置かれているなら、その共有メモリをユーザごとに分けておく必要があります。
                  > > これは大丈夫なはず。
                  > > Globalとlocal(ユーザごと)の名前空間が用意されていて、GLOBAL\で始まらないものはすべてLocalと解釈されるらしいので。
                  > とおっしゃった話がぼくにはまだよくわかっていないので、ぼくが思い違いをしているだけなのでしょう。
                  > 「ユーザごと」という単位が存在するということは、現在もマルチユーザ環境に特有の処理が一部行われているということでしょうか。
                  行われていません。マルチユーザ対応になったのはWindows XPの方です。WinXPでいう「マルチユーザ」というのはUNIXのようにOwnerの異なるプロセスを複数同時に走らせられるという意味です。(もっとも、NTの頃から可能でしたがXPではGUIアプリでもそれができるようになりました)

                  起動時の動作は
                  1. 共有メモリをチェック
                  2. 無ければ作る
                  となっています。ここで1のチェックはメモリにつけられた名前によって行われます。

                  WinXPのマルチユーザ環境ではAさんが作ったオブジェクトsakuraとBさんが作ったオブジェクトsakuraは別のものと認識されます。BさんはAさんのsakuraオブジェクトにたどり着くことはできません。ただし名前としてGLOBAL\のついたものを使う場合は両方から認識されます。Aさんが作ったGLOBAL\XはBさんもGLOBAL\Xという名前で参照できます。

                  共有メモリの名前が(実質的に)異なれば2つを同時に動かすことは可能です。現在のソースでもDEBUG用に構築したものはRelease用とは異なる名前の共有メモリを使うので、両者を独立の設定で併用できます。
                  • [940] Re8:設定ファイルの場所を指定する方法 tsuyo-pon 2001年12月03日 22:54

                    ▼ げんたさん
                    > WinXPのマルチユーザ環境ではAさんが作ったオブジェクトsakuraとBさんが作ったオブジェクトsakuraは別のものと認識されます。BさんはAさんのsakuraオブジェクトにたどり着くことはできません。ただし名前としてGLOBAL\のついたものを使う場合は両方から認識されます。Aさんが作ったGLOBAL\XはBさんもGLOBAL\Xという名前で参照できます。
                    知りませんでした。 MSDN の http://msdn.microsoft.com/library/en-us/termserv/tsovr_0cz7.asp に書かれていたので勉強してきました(「名前を "Local\" で始めるとオブジェクトを明示的にセッション名前空間に作ることができる」(少し意訳)という辺りは、「Local\」と書いても書かなくても同じ動作なのかという点をはっきりと書いてもらいたいですね)。
                    こういう仕様だから、 XP のユーザ切り替えを使っているとユーザごとに別々に設定ファイルを読んだり書いたりしているわけですね。それなのに、同じファイルを使っていることで、問題が生じると。……これは確かに問題だ :-) すべて納得したつもりです。
                    もとは機能の提案のつもりだったのですが、一方的に勉強させていただいてしまってすみません。

                    さて、じつは設定ファイルをユーザごとに分けると、 Windows 2000 で「別のユーザーとして実行」(Run As; GUI アプリケーションでも使えます)を使ったときの動作に懸念が残っているのですが、また勘違いしているかもしれないので、少し実験してから書き込みたいと思います。
                    本業の大学のほうがこれからしばらく忙しいので、しばらく引っ込みます。次に書けるのがいつになるかわかりませんが、そのときはまたよろしくお願いします。
                    • [943] Re9:設定ファイルの場所を指定する方法 げんた 2001年12月04日 09:36

                      >> ただし名前としてGLOBAL\のついたものを使う場合
                      Global\でしたね.私も実際に確認したわけではなくて文書のうろ覚えなので...(^^;)
                      やっぱり,いちどちゃんと実験してみた方がいいな.

                      >MSDN の http://msdn.microsoft.com/library/en-us/termserv/tsovr_0cz7.asp に書かれていたので
                      私が見たのもたぶんこれです.

                      >「Local\」と書いても書かなくても同じ動作なのかという点をはっきりと書いてもらいたいですね)。
                      何も付けない場合の動作は
                      ▼第1段落に
                      each client session has a separate name space
                      ▼第3段落に
                      Service applications on a Terminal Services server use the global name space by default
                      ▼第4段落に
                      more common case of running the application once per session is supported by default since the named object is created in a per session name space.
                      と書かれているからそこには書いてないのでしょう.