2021年5月9日日曜日

57: LibreOfficeまたはOpenOfficeにキーバインディングを登録する

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

マクロ(Python、Java、JavaScript、BeanShell、Basicの)を起動するために。拡張機能を通して。ドキュメントタイプ毎に。

話題


About: LibreOffice
About: Apache OpenOffice
About: Javaプログラミング言語
About: Pythonプログラミング言語
About: JavaScript
About: BeanShell
About: LibreOffice Basic
About: Apache OpenOffice Basic

この記事の目次


開始コンテキスト



ターゲットコンテキスト



  • 読者は、LibreOfficeまたはApache OpenOfficeにキーバインディングを拡張機能を通して登録する方法を知る。

オリエンテーション


任意のPythonマクロを格納する任意のLibreOfficeまたはApache OpenOffice拡張機能を作成することについての記事があります。

任意のLibreOfficeまたはApache OpenOfficeマクロ(拡張機能内に格納されているものを含む)をあなたのプログラムから呼び出すことについての記事があります。


本体

ト書き
Hypothesizer 7、Objector 57A、Objector 57Bが、コンピューターの前にいる。


1: キーバインディングを登録する動機


Hypothesizer 7
LibreOfficeまたはApache OpenOfficeのGUIからマクロを起動するための、1つの方法は、ドキュメントにボタンを作成することです。

Objector 57A
ああ、スプレッドシート上にボタンね。だが、そのマクロはそのスプレッドシートのためだけのものじゃないんだよね . . .

Hypothesizer 7
サー、分かります。

Objector 57A
それに、Writerドキュメントにボタンを追加できんだろ?

Hypothesizer 7
できないとは申し上げませんが、それは、満足のいく解決策ではないかもしれません。

Objector 57A
Writerドキュメントの1部をフリーズする(Calcドキュメントのいくつかの行をフリーズするように)ということができんから、当該マクロを起動する必要があるたびに、そのボタンの部分へスクロールしなくちゃいかんのかね?

Hypothesizer 7
それは好都合ではないとお察しします。

Objector 57A
「好都合ではない」は、あまりにも控えめすぎるぞ。

いずれにせよ、もしも、ボタンが常に見えていたとしても、マクロを起動しないといけない度に、ボタンをクリックするためにマウスカーソルを上に動かすのは面倒なんだよ、というかマウスを握るだけでもだ . . .

Hypothesizer 7
分かります。

Objector 57B
コンテキストメニューアイテムを登録できないの?

Hypothesizer 7
ああ、できます、マダム、しかし、コンテキストメニューは、コンテキストに依存することを行なうためのものであり、どのみちマウス操作を求めますし、コンテキストメニューアイテムを登録するには、若干のプログラミングが求められます、そこで、ここでは、ずっと簡単である、キーバインディングの登録を行ないましょう。


2: キーバインディングは拡張機能で容易に登録できる


Hypothesizer 7
キーバインディングは、拡張機能で容易に登録できます。

Objector 57A
「拡張機能」?「拡張機能」など、私は作れないぞ。

Hypothesizer 7
いいえ、作れます。ある以前の記事をお読みください。

Objector 57A
. . . うむ?ふーむ、それじゃあ、それはただのZIPファイルなんだな?

Hypothesizer 7
はい、ZIPファイルです、マニフェストが入っている、そして、本ケースでは、キーバインディング群のための1つのコンフィグレーションファイルが入ります。

Objector 57B
マクロがはどうなるの?それも同じ拡張機能に入れられないの?

Hypothesizer 7
できます。ある以前の記事が、任意のPythonマクロを拡張機能に入れる方法を既に取り扱いました。

Objector 57B
「Python」?だれが「Python」と言ったの?

Hypothesizer 7
私が言いました、マダム。

Objector 57B
私はBasicを使います。私はBasicを使うように想定されているでしょ?

Hypothesizer 7
誰かに何を想定されていようがどうでもよいことです。何をするかはあなたが決めることです。

Objector 57B
何で私はBasicを使うべきじゃないの?

Hypothesizer 7
えーと、率直に言うと、それは、プログラミング言語として良くないからです。

Objector 57B
どんなに「良くない」の?

Hypothesizer 7
それは、近寄らないように御忠告申し上げるほどに「良くない」です。

Objector 57B
. . . 'どんな点において'かを聞いてるんだけど。

Hypothesizer 7
それは、構想がまずいですし、装備がまずいですし、ドキュメンテーションがまずいです

Objector 57B
とてもまずいのねえ . . .

でも、LibreOfficeのGUIは、マクロを編集しようとすると、否応なしにBasic IDEへ連れて行くのよ!

Hypothesizer 7
はい、そのGUIは、とても誤解を招くものです、あなたはマクロをBasicで作らなければならないかのようで、しかし、実際は、そうではありません

Objector 57B
でも、Basicのほうが便利そうだけど、IDEが付いてるから。

Hypothesizer 7
そのIDEは . . . 扱い難くないとは言えない、と言わざるをえません。なぜ、その代わりに、あなたお気に入りのPython IDEをお使いにならないのでしょうか?

Objector 57B
私はBasicを使います、みんながそれを使っているがから。

Hypothesizer 7
「みんな」がそれを使っているわけではありません

Objector 57B
私はBasicを使うと言っているのよ!

Hypothesizer 7
. . . 結構です、任意のBasicマクロを拡張機能に入れる方法を御説明いたしましょう、ある以降の記事にて。


3: 当該コンフィグレーションファイルに何を書くべきか


Hypothesizer 7
とにかく、当該コンフィグレーションファイルのコンテンツは以下のようなものです。

KeyBindings.xml

@XML ソースコード
<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Accelerators" oor:package="org.openoffice.Office">
	<node oor:name="PrimaryKeys">
		<node oor:name="Modules">
			<node oor:name="com.sun.star.text.TextDocument">
				<node oor:name="C_MOD2" oor:op="replace">
					<prop oor:name="Command" oor:type="xs:string">
						<value xml:lang="en-US">vnd.sun.star.script:theBiasPlanet.clipboardHandlerUnoExtension.unoExtension.oxt/Scripts/python/theBiasPlanet/clipboardHandlerUnoExtension/macros/ClipboardHandler.py$copy?language=Python&amp;location=user:uno_packages</value>
					</prop>
				</node>
				<!-- Add each key as a node -->
			</node>
			<!-- Add each document type as a node -->
		</node>
	</node>
</oor:component-data>

Objector 57A
. . . ふーむ、どこにキーがあるんだ?

Hypothesizer 7
「C_MOD2」がキーであり、'Alt' + 'C'を意味します。

Objector 57A
それじゃあ、'MOD1'は'Ctrl'を意味するのか?

Hypothesizer 7
その通りです。

Objector 57A
'Shift' + 'Ctrl'は?

Hypothesizer 7
'SHIFT_MOD1'および'SHIFT_MOD2'が、'Shift' + 'Ctrl'および'Shift' + 'Alt'を意味します。

Objector 57B
「vnd.sun.star.script:theBiasPlanet.clipboardHandlerUnoExtension.unoExtension.oxt/Scripts/python/theBiasPlanet/clipboardHandlerUnoExtension/macros/ClipboardHandler.py$copy?language=Python&location=user:uno_packages」がPythonマクロを意味しているようね。

Hypothesizer 7
はい、詳しく言うと、ユーザー所有拡張機能内Pythonマクロです。各タイプの任意のマクロのための表現は、ある以前の記事にて説明されました。

Objector 57B
. . . うん?ああ。Basicもそこにあるじゃない。

Hypothesizer 7
1つ重要な点は「com.sun.star.text.TextDocument」で、それは、そのキーバインディングが、Writerドキュメントがアクティブである時のみ有効であることを意味します。

Objector 57A
おお。Calcには . . . 'com.sun.star.sheet.SpreadsheetDocument'かな?

Hypothesizer 7
正しくご推測なさいました。

Objector 57A
Impressには、'com.sun.star.presentation.PresentationDocument'に違いない。

Hypothesizer 7
. . . また正しくご推測なさったとは驚嘆です。

Objector 57A
. . . Drawには'com.sun.star.graphics.GraphicDocument'かな?

Hypothesizer 7
えーと、'com.sun.star.drawing.DrawingDocument'です、実は。

Objector 57A
はあ?納得いかない。ドキュメントタイプは'Graphics'だろ?

Hypothesizer 7
その通りです、しかし、私には事実を変えられません。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>