4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LibreOfficeCalcに関数候補表示機能を付けるまで 第1回 目的の設定と準備

Last updated at Posted at 2015-11-24

#はじめに
LibreOffice Calcの関数補完機能が弱すぎてつらいので、強くした。というお話。

##どうよわいのか
Google Spreadsheetがこれ。
google_spr.png

Microsoft Excelがこれ。
excel.png

で、LibreOffice Calcがこれ。
Screenshot from 2015-11-24 17:27:48.png

差は一目瞭然である。関数候補がない。関数の説明もない。あるのはただ第一候補のみ。いっそすがすがしいけれど、でも正直不便極まりない。
##やったこと
なので、これをこうした。
Screenshot from 2015-11-24 17:32:54.png

関数候補機能を追加。関数の説明も追加。Ctrl+Tabで次の関数候補に移動。Enterで決定。
ほんとはドロップリスト形式にしたかったけど、難しそうだし面倒だから挑戦しなかった。

#ビルド環境の準備
##環境
今回改造手術を受けたのは、LibreOffice-4.4.5.2。最新版のLO5ではなく、安定版を選んだ(最新版を選んで、もし自分で試行錯誤してるうちにアップデートで関数候補表示機能がついてしまったら非常に萎えるので)。OSはUbuntu 14.04。

##ダウンロード~コンパイルまで
まずは、ソースコードをダウンロードする。libreoffice-4.4.5.2.tar.xzをダウンロードして、展開。

shell
$ cd Downloads
$ tar xvf libreoffice-4.4.5.2.tar.xz # 解凍
$ cd libreoffice-4.4.5.2
$ sudo apt-get build-dep libreoffice
$ ./autogen.sh --with-lang="ja" --enable-dbgutil
$ make # めちゃくちゃ長い上に途中でエラーが出る

--enable-dbgutilをつけると、いい感じに全部デバッグシンボルを付けてコンパイルしてくれるらしい。自分でCFLAGS="-O0 -g"とかやるより安全。というか1回それで痛い目を見た(CXXFLAGS="-O0 -g"を付け忘れてmakeをやり直す羽目になった)。
makeを実行すると、しばらくしてから「実行権限がない」などとMakeがわめき出すので、

shell
$ cd bin
$ chmod +x unpack-sources
$ cd ../
$ make # めちゃくちゃ長い

としてあげるとおとなしくなってくれる。

##emacs上のデバッガで動かせるようになるまで
その後待つこと4時間半、やっとmakeが終わったら、次はいまコンパイルしたファイルをgdbで実行できるようにする。私は最近Emacs信者になったので、できればEmacs上のgdbで実行できるようにしたい…が、gdbで実行してもなぜかデバッグシンボルがないと言われてしまい、gdbで追うことが出来ない。

gud-gdb
(gdb) b main
No symbol table is loaded.  Use the "file" command.
Breakpoint 1 (main) pending.

ところが、こうするとshell上でgdbが起動し、デバッグできる。

shell
$ make debugrun

そこで、このmakeに-nを付けて、結局中でどんな命令を読んでるのかを調べてみる。

shell
~/libreoffice-4.4.5.2$ make debugrun -n
mkdir -p libreoffice-4.4.5.2/instdir
libreoffice-4.4.5.2/solenv/bin/install-gdb-printers -a libreoffice-4.4.5.2/instdir -c
make -j 8 -rs -f libreoffice-4.4.5.2/Makefile.gbuild  debugrun
OFFICESCRIPT=`mktemp` && printf 'if [ -e libreoffice-4.4.5.2/instdir/program/ooenv ]; then . libreoffice-4.4.5.2/instdir/program/ooenv; fi\n' > ${OFFICESCRIPT} && printf "gdb libreoffice-4.4.5.2/instdir/program/soffice.bin" >> ${OFFICESCRIPT} && printf " -ex \"set args --norestore --nologo '--accept=pipe,name=username;urp;' \"" >> ${OFFICESCRIPT} && /bin/sh ${OFFICESCRIPT} && rm ${OFFICESCRIPT}

変数OFFICESCRIPTに一時ファイルパスを入れて、そこにいろいろ書き込んでそのファイルを最後に削除してる。ので、最後のrmを取り除いて実行してみることに。

shell
$ OFFICESCRIPT=`mytmpfile.tmp` && printf 'if [ -e libreoffice-4.4.5.2/instdir/program/ooenv ]; then . libreoffice-4.4.5.2/instdir/program/ooenv; fi\n' > ${OFFICESCRIPT} && printf "gdb libreoffice-4.4.5.2/instdir/program/soffice.bin" >> ${OFFICESCRIPT} && printf " -ex \"set args --norestore --nologo '--accept=pipe,name=username;urp;' \"" >> ${OFFICESCRIPT} && /bin/sh ${OFFICESCRIPT}
mytmpfile.tmp
if [ -e libreoffice-4.4.5.2/instdir/program/ooenv ]; then . libreoffice-4.4.5.2/instdir/program/ooenv; fi
gdb libreoffice-4.4.5.2/instdir/program/soffice.bin -ex "set args --norestore --nologo '--accept=pipe,name=username;urp;' "

前半は関係なさそうなので、後半の部分をgud-gdbで起動する。

minibuffer
Run gud-gdb (like this): gdb --fullname libreoffice-4.4.5.2/instdir/program/soffice.bin -ex "set args --norestore --nologo '--accept=pipe,name=username;urp;' "

これでうまくデバッグできるようになった。

#次回予告
やっとgdbが使えるようになった。ので、次回からLibreOfficeのプログラムがどう動いてるのかを見ていくことにする。

#リンク
##LibreOfficeCalcに関数候補表示機能を付けるまで

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?