前の関連記事:LibreOffice5(74)PathSubstitutionサービスで既定値を取得する
pathsettingstest_macro.py: LibreOfficeの既定のパスを取得
def macro(): ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 doc = XSCRIPTCONTEXT.getDocument() if not doc.supportsService("com.sun.star.text.TextDocument"): # Writerドキュメントに結果を出力するのでWriterドキュメントであることを確認する。 raise RuntimeError("Please execute this macro with a Writer document.") # Writerドキュメントでないときは終わる。 txts = [] # Writerドキュメントに出力する文字列を入れるリスト。 predefinedpathproperties = "Addin",\ "AutoCorrect",\ "AutoText",\ "Backup",\ "Basic",\ "Bitmap",\ "Config",\ "Dictionary",\ "Favorite",\ "Filter",\ "Gallery",\ "Graphic",\ "Help",\ "Linguistic",\ "Module",\ "Palette",\ "Plugin",\ "Storage",\ "Temp",\ "Template",\ "UIConfig",\ "UserConfig",\ "UserDictionary",\ "Work" # https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Path_Settings pathsettingssingleton = ctx.getByName('/singletons/com.sun.star.util.thePathSettings') for predefinedpathproperty in predefinedpathproperties: try: url = pathsettingssingleton.getPropertyValue(predefinedpathproperty) except UnknownPropertyException: t = "Cannot get a property value of {}.".format(predefinedpathproperty) print(t, file=sys.stderr) txts.append(t) continue systempath = ";".join([os.path.normpath(unohelper.fileUrlToSystemPath(p)) if p.startswith("file://") else p for p in url.split(";")]) # 各パスについてシステムパスにして正規化する t = "{} : {}".format(predefinedpathproperty, systempath) print(t) txts.append(t) for predefinedpathproperty in predefinedpathproperties: # プロパティ名に_writableをつけてみる。パスが取得できたもののみ出力。 predefinedpathproperty = "{}_writable".format(predefinedpathproperty) try: url = pathsettingssingleton.getPropertyValue(predefinedpathproperty) except: continue if url: systempath = ";".join([os.path.normpath(unohelper.fileUrlToSystemPath(p)) if p.startswith("file://") else p for p in url.split(";")]) # 各パスについてシステムパスにして正規化する。 t = "{} : {}".format(predefinedpathproperty, systempath) print(t) txts.append(t) t = "These paths have been converted to system paths." print(t) txts.append(t) doc.getText().setString("\n".join(txts)) # Writerドキュメントに出力。 g_exportedScripts = macro, #マクロセレクターに限定表示させる関数をタプルで指定。thePathSettingsシングルトンのプロパティとして既定のパスを取得します。
プロパティはXPathSettingsインターフェイスの属性になります。
しかし、PyDevのデバッガのVariablesビューでプロパティをみようとするとなぜかデバッガが終了してしまいます。
なので、このスクリプトでプロパティの値を確認しないといけません。
getPropertyValue()メソッドで返ってくるのはFileURLなのでそれをunohelper moduleの fileUrlToSystemPath()でシステムパスに変換してから出力しています。
Addin : /opt/libreoffice5.2/program/addin AutoCorrect : /opt/libreoffice5.2/share/autocorr;/home/pq/.config/libreoffice/4/user/autocorr AutoText : /opt/libreoffice5.2/share/autotext/ja;/home/pq/.config/libreoffice/4/user/autotext Backup : /home/pq/.config/libreoffice/4/user/backup Basic : /opt/libreoffice5.2/share/basic;/home/pq/.config/libreoffice/4/user/basic Bitmap : /opt/libreoffice5.2/share/config/symbol Config : /opt/libreoffice5.2/share/config Dictionary : /opt/libreoffice5.2/share/wordbook;/home/pq/.config/libreoffice/4/user/wordbook Favorite : /home/pq/.config/libreoffice/4/user/config/folders Filter : /opt/libreoffice5.2/program/filter Gallery : /opt/libreoffice5.2/share/gallery;/home/pq/.config/libreoffice/4/user/gallery Graphic : /home/pq/.config/libreoffice/4/user/gallery Help : /opt/libreoffice5.2/help Linguistic : /opt/libreoffice5.2/share/dict;/opt/libreoffice5.2/share/dict/ooo;/home/pq/.config/libreoffice/4/user/wordbook Module : /opt/libreoffice5.2/program Palette : /opt/libreoffice5.2/share/palette;/home/pq/.config/libreoffice/4/user/config Plugin : /opt/libreoffice5.2/program/plugin Storage : /home/pq/.config/libreoffice/4/user/store Temp : /tmp Template : /opt/libreoffice5.2/share/template/common;/opt/libreoffice5.2/share/template/ja;vnd.sun.star.expand:$BUNDLED_EXTENSIONS/wiki-publisher/templates;/home/pq/.config/libreoffice/4/user/template UIConfig : /opt/libreoffice5.2/share/config UserConfig : /home/pq/.config/libreoffice/4/user/config Cannot get a property value of UserDictionary. Work : /home/pq AutoCorrect_writable : /home/pq/.config/libreoffice/4/user/autocorr AutoText_writable : /home/pq/.config/libreoffice/4/user/autotext Backup_writable : /home/pq/.config/libreoffice/4/user/backup Basic_writable : /home/pq/.config/libreoffice/4/user/basic Dictionary_writable : /home/pq/.config/libreoffice/4/user/wordbook Favorite_writable : /home/pq/.config/libreoffice/4/user/config/folders Gallery_writable : /home/pq/.config/libreoffice/4/user/gallery Graphic_writable : /home/pq/.config/libreoffice/4/user/gallery Palette_writable : /home/pq/.config/libreoffice/4/user/config Storage_writable : /home/pq/.config/libreoffice/4/user/store Temp_writable : /tmp Template_writable : /home/pq/.config/libreoffice/4/user/template UserConfig_writable : /home/pq/.config/libreoffice/4/user/config Work_writable : /home/pq These paths have been converted to system paths.これらは定義なので、まだ存在していないフォルダもあります。
Path Settings - Apache OpenOffice Wikiに各プロパティの解説があります。
これらのパスはshare/registry/main.xcdのorg.openoffice.OfficeパッケージのPathsコンポーネントのPathsノード以下で定義されています。
そこではLibreOffice5(74)PathSubstitutionサービスで既定値を取得するででてきた$で始まる既定値がたくさん使われています。
$(insturl)とか$(userurl)がまだ使われています。
_writableをつけたプロパティ名では、ユーザー権限で書き込みできるフォルダのみが返ってきます。
_writableをつけたプロパティ名はjavaの動かない例のSystemDialog.javaで使ってあったものですが、解説はみつけられませんでしたのでそのうち使えなくなっているかもしれません。
Templateプロパティではvnd.sun.star.expand:$BUNDLED_EXTENSIONS/wiki-publisher/templatesというパスが返ってきています。
このパスをunohelper.fileUrlToSystemPath()に渡すと、エラーが返ってきます。
uno.RuntimeException: Couldn't convert file url to a system path for reason (21)
なので40行目ではfile://で始まるパスのみfileUrlToSystemPath()を渡しています。
vnd.sun.star.expandはUCPのプロトコールの一つですがいまのところ展開のやり方はわかりません(OOoBasic/Generic/UCB - ...?参照)。
ユーザーがインストールした拡張機能までのパスはAddons.xcuでは%origin%で取得できます(LibreOffice5(40)ツールバーやメニューに表示させるアイコン画像)。
変更した既定のパスを元に戻す方法
$で始まる既定値と違って、既定のパスは通常のプロパティと同様にsetPropertyValue()で変更できます。
Javaの例PathsettingsTest.javaではWorkを$(temp)に置換しています。
ツール→オプション→LibreOffice→パス、で変更後のパスが確認できます。
「マイドキュメント」が/tmpに変わっています。
元に戻すには項目を選択して「標準」ボタンをクリックします。
このダイアログに表示されていないパスについては変更できるのかとかどうやって元に戻すのかはわかりません。
Windows10 64bitで既定のパス
Addin : C:\Program Files (x86)\LibreOffice 5\program\addin AutoCorrect : C:\Program Files (x86)\LibreOffice 5\share\autocorr;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\autocorr AutoText : C:\Program Files (x86)\LibreOffice 5\share\autotext\ja;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\autotext Backup : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\backup Basic : C:\Program Files (x86)\LibreOffice 5\share\basic;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\basic Bitmap : C:\Program Files (x86)\LibreOffice 5\share\config\symbol Config : C:\Program Files (x86)\LibreOffice 5\share\config Dictionary : C:\Program Files (x86)\LibreOffice 5\share\wordbook;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\wordbook Favorite : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\config\folders Filter : C:\Program Files (x86)\LibreOffice 5\program\filter Gallery : C:\Program Files (x86)\LibreOffice 5\share\gallery;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\gallery Graphic : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\gallery Help : C:\Program Files (x86)\LibreOffice 5\help Linguistic : C:\Program Files (x86)\LibreOffice 5\share\dict;C:\Program Files (x86)\LibreOffice 5\share\dict\ooo;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\wordbook Module : C:\Program Files (x86)\LibreOffice 5\program Palette : C:\Program Files (x86)\LibreOffice 5\share\palette;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\config Plugin : C:\Program Files (x86)\LibreOffice 5\program\plugin Storage : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\store Temp : C:\Users\pq\AppData\Local\Temp Template : C:\Program Files (x86)\LibreOffice 5\share\template\common;C:\Program Files (x86)\LibreOffice 5\share\template\ja;vnd.sun.star.expand:$BUNDLED_EXTENSIONS/wiki-publisher/templates;C:\Users\pq\AppData\Roaming\LibreOffice\4\user\template UIConfig : C:\Program Files (x86)\LibreOffice 5\share\config UserConfig : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\config Cannot get a property value of UserDictionary. Work : C:\Users\pq\Documents AutoCorrect_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\autocorr AutoText_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\autotext Backup_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\backup Basic_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\basic Dictionary_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\wordbook Favorite_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\config\folders Gallery_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\gallery Graphic_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\gallery Palette_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\config Storage_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\store Temp_writable : C:\Users\pq\AppData\Local\Temp Template_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\template UserConfig_writable : C:\Users\pq\AppData\Roaming\LibreOffice\4\user\config Work_writable : C:\Users\pq\Documents These paths have been converted to system paths.linuxBeanで実行したときと同様にUserDictionaryは定義されていませんでした。
(2017.11.30追記。拡張機能のインストールパスは拡張機能IDを引数にして、PackageInformationProviderサービスのgetPackageLocation()メソッドで取得できます。)
参考にしたサイト
LibreOffice 5.3 SDK - Developer's Guide ExamplesJavaの例PathsettingsTest.javaをPythonにしました。
OOoBasic/Generic/UCB - ...?
vnd.sun.star.expandがでてくる解説。
0 件のコメント:
コメントを投稿