LibreOfficeCalc에 기능 후보 표시 기능을 붙일 때까지 제1회 목적의 설정과 준비
소개
LibreOffice Calc의 함수 보완 기능이 너무 약해서 힘들기 때문에 강하게 했다. 라는 이야기.
어때?
Google Spreadsheet이 이것.
Microsoft Excel이 이것.
그래서 LibreOffice Calc가 이것.
차이는 일목요연하다. 함수 후보가 없다. 함수 설명도 없다. 있는 것은 단지 제1 후보만. 차라리 멋지지만, 하지만 솔직히 불편할 정도는 아니다.
했던 일
그래서 이것을 이런.
기능 후보 기능을 추가. 함수 설명도 추가. Ctrl+Tab에서 다음 함수 후보로 이동. Enter로 결정.
정말 드롭리스트 형식으로 하고 싶었지만, 어려울 것 같고 귀찮기 때문에 도전하지 않았다.
빌드 환경 준비
환경
이번 개조 수술을 받은 것은 LibreOffice-4.4.5.2. 최신판의 LO5가 아니라, 안정판을 선택했다(최신판을 선택해, 만약 스스로 시행착오하고 있는 동안에 업데이트로 함수 후보 표시 기능이 붙어 버리면 매우 위장하기 때문에). OS는 우분투 14.04.
다운로드~컴파일까지
우선, 소스 코드 다운로드 . libreoffice-4.4.5.2.tar.xz를 다운로드하고 배포.
쉘$ 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
쉘$ 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가 기동해, 디버그할 수 있다.
쉘$ make debugrun
그래서 이 make
에 -n을 붙여 결국 중 어떤 명령을 읽고 있는지를 살펴본다.
쉘~/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을 제거하고 실행하려고합니다.
쉘$ 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.tmpif [ -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로 기동한다.
minibufferRun 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에 기능 후보 표시 기능을 추가할 때까지
환경
이번 개조 수술을 받은 것은 LibreOffice-4.4.5.2. 최신판의 LO5가 아니라, 안정판을 선택했다(최신판을 선택해, 만약 스스로 시행착오하고 있는 동안에 업데이트로 함수 후보 표시 기능이 붙어 버리면 매우 위장하기 때문에). OS는 우분투 14.04.
다운로드~컴파일까지
우선, 소스 코드 다운로드 . libreoffice-4.4.5.2.tar.xz를 다운로드하고 배포.
쉘
$ 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
쉘
$ 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가 기동해, 디버그할 수 있다.
쉘
$ make debugrun
그래서 이
make
에 -n을 붙여 결국 중 어떤 명령을 읽고 있는지를 살펴본다.쉘
~/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을 제거하고 실행하려고합니다.
쉘
$ 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에 기능 후보 표시 기능을 추가할 때까지
LibreOfficeCalc에 기능 후보 표시 기능을 추가할 때까지
Reference
이 문제에 관하여(LibreOfficeCalc에 기능 후보 표시 기능을 붙일 때까지 제1회 목적의 설정과 준비), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KRiver1/items/2188d71d316a28ad23ac텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)