Budgie(5) Ubuntu Budgie 20.04 にgeany の「Markdown」プラグインをビルド、インストール


## はじめに

Ubuntu Budgie 20.04 Daily に[Geany](https://qiita.com/FuRuYa7/items/81c2f7a1449681ea8aaf) をインストールしました。「Markdown」プラグインがあることを知りましたが、ビルドしないとインストールできません。

前回のGeany の[ビルド環境を構築](https://qiita.com/FuRuYa7/items/1e96da54682bce7889f2) に続いて、「プラグインのビルド、およびインストール」をしました。

そのときの備忘録になります。



---
#### geany に内蔵されたプラグイン

ツール →プラグインマネージャ → 標準で 6個のプラグインが入っています。

起動時に読み込まれるプラグインを選択:

- HTML 記号
`&amp;` のようなHTML 文字実体を挿入します。

- アクションを保存
ファイル保存時に、複数のアクションを選択できるようにします。

- ウィンドウを分割
編集ビューを2つのウィンドウに分割します。

- エクスポート
現在のファイルを別の形式にエクスポートします。

- クラスビルダー
新しいクラスのソースファイルを作成します。

- ファイルブラウザ
ファイルブラウザのタブをサイドバーに追加します。


---
#### その他のプラグインをインストール:

```
$ sudo apt update
$ sudo apt install geany-plugins
:
提案パッケージ:
  vim | nvi | vile | emacsen
以下のパッケージが新たにインストールされます:
  exuberant-ctags geany-plugin-addons geany-plugin-autoclose geany-plugin-automark
  geany-plugin-codenav geany-plugin-commander geany-plugin-ctags geany-plugin-defineformat
  geany-plugin-doc geany-plugin-extrasel geany-plugin-gendoc geany-plugin-geniuspaste
  geany-plugin-git-changebar geany-plugin-insertnum geany-plugin-keyrecord geany-plugin-latex
  geany-plugin-lineoperations geany-plugin-lipsum geany-plugin-lua geany-plugin-macro
  geany-plugin-miniscript geany-plugin-numberedbookmarks geany-plugin-overview
  geany-plugin-pairtaghighlighter geany-plugin-pg geany-plugin-pohelper geany-plugin-prettyprinter
  geany-plugin-prj geany-plugin-projectorganizer geany-plugin-sendmail geany-plugin-shiftcolumn
  geany-plugin-spellcheck geany-plugin-tableconvert geany-plugin-treebrowser
  geany-plugin-updatechecker geany-plugin-vc geany-plugin-vimode geany-plugin-workbench
  geany-plugin-xmlsnippets geany-plugins geany-plugins-common libctpl2 libgit2-28 libgtkspell3-3-0
  libhttp-parser2.9 liblua5.1-0 libmbedcrypto3 libmbedtls12 libmbedx509-0 libssh2-1
```
→たくさんのパッケージが入りました。ほとんどが共有ライブラリ(.so ) のファイルです。
個人的には使わないと思えるプラグインが多いです。


---
#### プラグインを使うには:

1. ツール →プラグインマネージャ を起動します。
2. 使いたいプラグインを選択（チェック）します。


---

#### 試してみたい「markdown」プラグインは含まれていません

```
$ apt search geany | grep markdown

$ apt list geany-plugin-markdown
一覧表示... 完了
```
→リポジトリに含まれていません。

なぜなのかを調べると:

Geany は、GTK-3 でビルドされており、GTK-2 でビルドされた「geany-plugin-markdown」プラグインは含まれません。

ただし、プラグインのソースはGTK-3 に対応したので、プラグインをビルドすれば使えます。
プラグインをビルドするには webkit2gtk が必要で、それは libwebkit2gtk-4.0-dev パッケージになります。

参考:

[マークダウンプラグインをインストールできません ＃792](https://github.com/geany/geany-plugins/issues/792)

```
$ geany --version  
geany 1.36 (Nov 20 2019 以降に次を使用してビルドGTK 3.24.12, GLib 2.63.1)

$ apt search webkit2gtk | grep "インストール済"  
:  
libwebkit2gtk-4.0-37/focal,now 2.26.2-1 amd64 [インストール済み、自動]  
libwebkit2gtk-4.0-dev/focal,now 2.26.2-1 amd64 [インストール済み]
```


---
#### プラグインのソースの入手

GitHub [geany/geany-plugins](https://github.com/geany/geany-plugins)

クーロンするときのURL:
(https://github.com/geany/geany-plugins.git)


```
$ cd ~/Git/  
$ git clone https://github.com/geany/geany-plugins.git
```

ダウンロードされたかの確認:

```
$ cd ~/Git/geany-plugins/  

$ ls -a
.                defineformat            markdown
..               devhelp                 multiterm
.git             geanyctags              overview
.gitignore       geanydoc                pairtaghighlighter
.travis.yml      geanyextrasel           po
HACKING          geanygendoc             pohelper
MAINTAINERS      geanyinsertnum          pretty-printer
Makefile.am      geanylua                projectorganizer
NEWS             geanymacro              scope
README           geanyminiscript         sendmail
README.rst       geanynumberedbookmarks  shiftcolumn
README.template  geanypg                 spellcheck
addons           geanyprj                tableconvert
autoclose        geanypy                 treebrowser
autogen.sh       geanyvc                 updatechecker
automark         geniuspaste             utils
build            git-changebar           vimode
codenav          keyrecord               webhelper
commander        latex                   workbench
configure.ac     lineoperations          xmlsnippets
debugger         lipsum
```


---
#### 個々のプラグインをコンパイルするときは:

抜粋:

>Geany Plugins プロジェクトは、再帰的な Automake ビルドシステムを使います。つまり、./configure を実行した後、それぞれのプラグインディレクトリに cd し、その中で make を実行することで、個々のプラグインをコンパイルできます。


---
##### ./autogen.sh のパラメータ:


- 「--enable- <option> = auto」を使用すると、
	システムに依存関係が存在するかどうかに基づいて、機能が自動的に有効/無効になります。

- 「--enable- <option>」を使用すると、
	機能が強制的に有効になり、依存関係が欠落している場合、エラーメッセージで構成が失敗します。 

- 「--disable- <option>」は、機能を強制的に無効にします。


利用可能なプラグインは次のとおりです。:
markdown -- the Markdown plugin


---

１. ./autogen.sh の実行:

```
$ cd ~/Git/geany-plugins/
$ ./autogen.sh --enable-markdown
:
geany-plugins-1.37

  Build Environment:
    Geany version:                1.36 (GTK3)
    Install prefix:               /usr/local
    Datadir:                      /usr/local/share/geany-plugins
    Libdir:                       /usr/local/lib/geany-plugins
    Docdir:                       /usr/local/share/doc/geany-plugins
    Plugins path:                 /usr/lib/x86_64-linux-gnu/geany

  Build Features:
    Unit tests:                   no
    Static code checking:         no
    Extra C compiler warnings:    yes
    Extra linker options:         yes

  Plugins:
    Addons:                       yes
    Autoclose:                    yes
    Automark:                     yes
    CodeNav:                      yes
    Commander:                    yes
    Debugger:                     no
    Defineformat:                 yes
    DevHelp:                      no
    GeanyCtags:                   yes
    GeanyDoc:                     yes
    GeanyExtraSel:                yes
    GeanyGenDoc:                  no
    GeanyInsertNum:               yes
    LaTeX:                        yes
    GeanyLua:                     no
    GeanyMacro:                   yes
    GeanyMiniScript:              yes
    GeanyNumberedBookmarks:       yes
    GeanyPrj:                     yes
    Geanypy:                      no
    GeanyVC:                      yes
    GeanyPG:                      no
    GeniusPaste:                  yes
    GitChangeBar:                 no
    keyrecord:                    yes
    LineOperations:               yes
    Lipsum:                       yes
    Markdown:                     yes
    MultiTerm:                    no
    Overview:                     yes
    PairTagHighlighter:           yes
    PoHelper:                     yes
    Pretty Printer:               yes
    ProjectOrganizer:             yes
    Scope:                        no
    Sendmail:                     yes
    ShiftColumn:                  yes
    Spellcheck:                   no
    TreeBrowser:                  yes
    Tableconvert:                 yes
    Updatechecker:                yes
    Vimode:                       yes
    WebHelper:                    no
    Workbench:                    no
    XMLSnippets:                  yes

  Features:
    GeanyVC GtkSpell support:     no
    Markdown library:             peg-markdown
    Utility library:              yes
    Utility library VTE support:  no
```

２. プラグインのディレクトリに移動:

```
$ cd ~/Git/geany-plugins/markdown
$ ls -a
.           COPYING      Makefile.in  peg-markdown
..          ChangeLog    NEWS         src
.gitignore  Makefile     README
AUTHORS     Makefile.am  docs
```

３. make の実行:

```
$ make
```

４. sudo make install の実行:

```
$ sudo make install
[sudo] USER_NAME のパスワード: 
```


---
#### プラグインの動作確認

Geany を起動。

ツール →プラグインマネージャ →「Markdown」にチェック →プラグインが有効化されます。


---
編集 →プラグインの設定 →「Markdown」タブ

Position: Sidebar

- サイドバー（画面左）
- メッセージウィンドウ（画面下）

どちらにチェックすることで、表示する位置を選べます。

→OK


---
表示 →「サイドバーを表示」にチェック

画面左のサイドバーに「Markdown Preview」タブが表示されます。

ただし、**画面が真っ暗** です。
マウスで文字選択すると、領域の反転で文字が表示されます。


---
色の設定がまずいので、設定します。

編集→プラグインの設定→「Markdown」タブ

![plugin-settei.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489751/340dc715-a989-8f6a-b90d-fb826062777d.jpeg)


```
Font: Serif Regular 12
Code Font: Sans Regular 12
BG Color: 少しだけ暗めの白色（白の左隣）
FG Color: 少しだけ明るめの黒（黒の右隣）、or 黒、or 紫
Template: template.html
```
→すべての項目を設定すると、文字が表示されました。


![plugin-kakunin.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489751/17f2a8e0-366e-ec7d-d071-aaad11c32fe5.jpeg)
→左のウィンドウがレビュー表示、右が編集画面です。Geany アプリのウィンドウを半分ずつ使うので、全画面表示にしたほうが見やすいです。

→GitHub よりも構文が厳密（余計に空白行が必要）で、
水平線は、その下に必ず空白行を入れないとただの文字列です。

つまり、Qiita に投稿する文章も、手を入れないときれいなレビューになりません。互換性がないのがつらいところ。

レビュー表示と編集画面は連動してスクロールしません。

編集画面でEnter やBS キーで、改行の位置の変化があるとレビューが更新され、レビュー画面が先頭行に戻ります。元の行に戻るのが面倒なので、現在行を保持してくれた方がありがたいです。

---
#### Markdown ファイルをHTML ファイルとして保存するメニューが追加されます。

これは、Markdown ファイルの本来の使われ方（HTML ファイルの作成）です。

ツール →「Export Markdown as HTML ...」のメニューが追加されます。
（MarkdownをHTMLとしてエクスポート）

レビュー画面を表示しなくても、HTML ファイルとして保存できます。この機能を使うだけのためにプラグインを入れるのもアリです。

注意点は、レビュー表示そのままの文字や背景の色で作成されます。「プラグインの設定」を見直してから、保存するのが楽です。ただし、HTML ファイルの先頭行を修正すれば良いだけです。

ここの部分は、「Template: template.html」に対応しています。なので、自分で使いたい色のコードを指定したTemplate ファイルを指定すれば、修正も要らなくなります。

１. （明るいテーマ）
Template: template-light.html （例: 一部抜粋）

```html:template-light.html
    <style type="text/css">
      body {
        font-family: Serif;
        font-size: 12pt;
        background-color: #eeeeec;　→少しだけ暗めの白
        color: #2e3436;　→少しだけ明るめの黒
      }
      code {
        font-family: Sans;
        font-size: 12pt;
      }
    </style>
```



２. （暗いテーマ）
Template: template-dark.html（例: 一部抜粋）

```html:template-dark.html
    <style type="text/css">
      body {
        font-family: Noto Serif CJK JP;
        font-size: 12pt;
        background-color: #2e3436;　→濃いグレー
        color: #8ae234;　→薄い黄緑色
      }
      code {
        font-family: Noto Sans Mono CJK JP;
        font-size: 12pt;
      }
    </style>
```


---
現在の「プラグインの設定」で指定した色やフォントで作成されたHTML ファイルの先頭:

```html:
<html>
  <head>
    <style type="text/css">
      body {
        font-family: Serif;
        font-size: 12pt;
        background-color: #eeeeec;
        color: #2e3436;
      }
      code {
        font-family: Sans;
        font-size: 12pt;
      }
    </style>
  </head>
  <body>
  
:省略

  </body>
</html>
```


---
#### 「Markdown」の設定ファイル

~/.config/geany/plugins/markdown/markdown.conf

```
[general]
template=/home/ubn/.config/geany/plugins/markdown/template.html

[view]
position=0			レビュー画面の位置（この場合は、サイドバー）
font_name=Noto Serif CJK JP
code_font_name=Noto Sans Mono CJK JP
font_point_size=12
code_font_point_size=12
bg_color=#2e3436	→濃いグレー
fg_color=#8ae234	→薄い黄緑色

```
→こちらは、「プラグインの設定」をダーク系に変えています。フォントも変更。


---
#### カスタムテンプレート (~/.config/geany/plugins/markdown/template.html)

実行時に置換される置換文字を含む（カスタムできる）HTML テンプレートファイルを提供しています。
下記の置換文字列が利用できます。

> @@font_name@@				通常のフォント
> @@code_font_name@@		コード/モノスペースのフォント
> @@font_point_size@@		通常のフォントのサイズ（ポイント単位）
> @@code_font_point_size@@ 	コード/モノスペースのフォントのサイズ（ポイント単位）
> @@bg_color@@ 				HTMLカラー表記の前景（テキスト）色
> `@@markdown@＠`　			置換文字列（←`@＠` は `@@` と読み替え）
→テンプレートにこれがないと、プラグインはまったく役に立ちません。



---

```html:デフォルトのHTMLテンプレートファイル

<html>
  <head>
    <style type="text/css">
      body {
        font-family: @@font_name@@;
        font-size: @@font_point_size@@pt;
        background-color: @@bg_color@@;
        color: @@fg_color@@;
      }
      code {
        font-family: @@code_font_name@@;
        font-size: @@code_font_point_size@@pt;
      }
    </style>
  </head>
  <body>
    @@markdown@＠　←読み替えが必要です
  </body>
</html>

```

→普通のHTML/CSS ファイルです。編集してレビューの内容を希望どおりに表示できます。
レビューはWebKit ブラウザで表示され、他のブラウザと同じように、HTML5 やCSS3 サポートなどの機能を（部分的ですが）サポートします。

デフォルトのtemplate.html ファイルを台無しにした場合は、template.html ファイルを削除してGeany を再起動すると、Markdown プラグインにより、デフォルトのファイルが再作成されます。

→「`@@markdown@＠`」の「`@＠`」は「`@@`」と読み替えます。その理由は後で述べます。


---
#### レビューの違いを確認:

- ハイライトが適用されるたびに、レビュー画面が先頭に戻ります。
→これは面倒。

- 行末にスペース 2個を置いても改行されないときがありました。
→行末にスペース、スペースを追加ではダメでした。
行末でスペース、スペース、Enter が必要でした。

- 水平線は、前後に空白行がないと引かれません。

- コード記述も、前後に空白行がないと機能しません。

- コード記述「 ``` $ ls ``` 」のフォントは、プラグインの設定の「code_font_name=」のフォントが使われます。

見出しのテスト用:

```
**見出しは ` 6 ` までで、文字のサイズが変わる太字です。**
水平線は引かれません。

# 見出し1 一番大きい太字の文字です。
## 見出し2 もっと大きい太字の文字です。
### 見出し3 少し大きい太字の文字です。
#### 見出し4 普通サイズで太字の文字です。
##### 見出し5 小さな文字です。
###### 見出し6 もっと小さな文字です。
####### 見出し7 `#` が付いた見出し6です。
```
太字、斜体のテスト用:

```
*abc*
**abc**
***abc***

_abc_
__abc__
___abc___
```

参考:

マークダウン：構文
(https://daringfireball.net/projects/markdown/syntax)


---
#### Markdown プラグインの不具合: Geany がフリーズ

**予約語に注意** :

Markdown プラグインが有効のときは、予約語である「`@@markdown@＠`」（←`@＠` は `@@` と読み替えます）の文字列の取扱いに注意。その他の予約語では発生しません。

特にtemplate.html ファイルの内容をMarkdown ファイルにそのまま貼り付けるのは禁止です。中に文字列が含まれるので、コード記述の中であっても、入力した途端にフリーズします。

不具合報告の回答によると置換文字列の予約語につき対応しないとのこと。再帰的なループみたい。body 内を置換するのでループしそうではあります。

普通は出てこない文字列（にしている）なのですが…。この投稿を書くためにコード記述の中に貼り付けたらフリーズ。原稿が飛びました。

文字列が書かれたMarkdown ファイルを開いたり、編集でこの文字列を入力すると、すぐにGeany がフリーズします。（投稿の中は、フリーズしないように、全角をひとつ混ぜて記述しているので安全だと思います。）

プラグインをインストールしていても、プラグインが無効なら問題はありませんし、有効でも、この文字列を入力しなければ問題ありません。

気を付けていても起こるのが事故なので、頻繁に上書き保存を心がけると、思わぬ事態（フリーズにも）に対処できます。これが一番。もしくは .txt で保存。


---
#### 別件: Qiita の投稿を確認していて気づいたこと

Qiita に投稿して、この投稿をFirefox ブラウザで確認すると「@＠」の違いが分かりづらいことに気付きました。ブラウザのフォントは、デフォルトのフォントです。
→Firefox 規定のフォント:「規定 (Noto Sans CJK JP)」

「@＠」は「半角の@、全角の＠」なのですが、
あなたの環境では違いが分かりますか？

「半角の@@@@@」
「全角の＠＠＠＠＠」
→違いを際立たせるには、コード記述にするのがいいみたい。
「半角の`@@@@@`」
「全角の`＠＠＠＠＠`」

それと、Qiita に投稿では「@@markdown@＠」の中の「@markdown」はリンク扱いになります。(404 ERROR)
これも全体をコード記述にするのがいいみたいです。
「`@@markdown@＠`」

やはり、下書き保存での確認と、投稿後の再確認が必要ですね。


---
### まとめ

Markdown プラグインのインストールで、「Markdown ファイルをHTML ファイルとして保存する」メニューが追加されました。この機能だけでも、ビルドをしてインストールして良かったと思いました。

ATOM エディタでは重すぎます。


（[次の投稿に続く]
(https://qiita.com/FuRuYa7/items/c67379ffeaeb4a404273)）


---

今までの**投稿一覧**は 「[ここ](https://qiita.com/FuRuYa7/items/f82312cd7670408dfa8b#%E6%8A%95%E7%A8%BF%E4%B8%80%E8%A6%A7) 」


-