2019年8月29日木曜日

Emacs の ox-hugo で HUGO を (2)

org-mode の babel(org-src) で PlantUML のスクリプトを記述して、ox-hugo で Hugo に反映できるかやってみた。

  • まず、emacs で plantuml-mode をインストしておく。

    (use-package plantuml-mode :ensure t
      :mode (("\\.plantuml\\'"  . plantuml-mode)
             ("\\.ptuml\\'" . plantuml-mode))
      :config
      (setq plantuml-jar-path (expand-file-name "~/bin/plantuml.jar"))
      (setq plantuml-exec-mode '(jar))
      )
    
  • 次に、org-mode の babel で plantuml を有効にしたりする。

      (use-package ob :ensure nil :after org :demand
        :config
        (setq org-confirm-babel-evaluate t)  ;; 実行は確認してから
        ;; = blockdiag
        (use-package ob-blockdiag :ensure t :demand :after ob)
        ;; = mermaid
        (use-package ob-mermaid :ensure t :demand :after ob
          :mode  ("\\.mmd\\'" . mermaid-mode)
          :config
          (setq ob-mermaid-cli-path "/home/ほげ/.yarn/bin/mmdc")
          )
        ;; = plantuml
        (setq org-plantuml-jar-path (expand-file-name "~/bin/plantuml.jar"))
        ;;
        ;; = gnuplot これをインストしないと動かなかった。 [2019-08-13]
        (use-package gnuplot :ensure t :demand  :after ob)
        ;;
        ;; = active Babel languages
        (org-babel-do-load-languages
         'org-babel-load-languages
         '((R          . t)
           (emacs-lisp . t)
           (awk        . t)
           (shell      . t)
           (python     . t)
           (perl       . t)
           (dot        . t)
           (gnuplot    . t)
           (ditaa      . t)
           (mermaid    . t)
           (plantuml   . t)
           ))
        ;;                  ;
        (add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))
        (add-to-list 'org-src-lang-modes '("diag" . xdiag)) ;; blockdiag
        (add-to-list 'org-src-lang-modes '("mermaid" . mermaid))
        (add-to-list 'org-src-lang-modes '("plantuml" . plantuml))
        (add-to-list 'org-src-lang-modes '("gnuplot" . gnuplot))
        )
    
  • hugo の org file での記述は以下。both が code なら、コードだけ。 `:exports` の オプションは、code, results, both, none。

        #+caption: plantuml test code 00
        #+name: plantuml-code-00
        #+BEGIN_SRC plantuml :file plantuml_test1.png :cmdline -charset UTF-8 :exports code
        @startuml
        class Foo1 {
          複数行に
          対応している。
          ..
          as you want
          and group
          ==
          things together.
          __
          You can have as many groups
          as you want
          --
          End of class
        }
    
        class User {
          .. Simple Getter ..
    ​      + getName()
    ​      + getAddress()
          .. Some setter ..
    ​      + setName()
          __ private data __
          int age
          -- encrypted --
          String password
        }
        @enduml
        #+END_SRC
    
        #+CAPTION: plantuml test 01 result
        #+RESULTS:
        [[file:plantuml_test1.png]]
    

    caption の使い方が良く解らない。 both にしたときの、result のキャプション指定が別らなかった。とりあえず、code にして、手作業で指定。 blogg的な使い方なんで、キャプション抜きでよいか。

    あと、hugo での build も、 shell ではなく、 org-babel で行うようにした。 hugo は早いけど、やはり十数秒必要なので、オプションで `:async` を設定してみた。 (万能ではないので、動作確認が必要みたい)

        #+BEGIN_SRC shell :async
        cd ~/Documents/mup/hugo; hugo
        #+END_SRC
    

画像の作成は、sphinx のように、ビルダー側でなく、 emacs 側でハンドリングするので、他のスクリプトも、emacs で作業できるなら、 使えるということだろう。当たり前か。

しかし、postが少し増えると、ファイルがすぐに大きくなるので、 org-refile や org-archive なんかが頻繁に必要になるかもと思う。個別ファイルの方が良かったかも。杞憂?

org-refile は、起動に時間がかかるので、avy-org-refile-as-child が使えないかと...

2019年8月23日金曜日

khal のデータファイルを org に変換してみた

日頃、作業とかポタリングとかのスケジュール管理に、 khal(GitHub) を使っている。

データは手元のパソコンに保存されていて、 45分毎に、ラズパイで稼動させている DAViCal (CalDAV servers) と Google との三者を vdirsyncer で同期させている。

予定管理自体を、emacs で行うことは諦めていたのだが、 今更だが、 khal の一覧機能が不満なので、 emacsで管理するのではなく単に一覧を表示する だけなら、 出来るかもと考えた次第。

結果はこんな感じ。自転車とゴミ出しだけだが。

最近はこうなってる(201911)。

python のスクリプトを、 emacs から起動して、 以下の関数を用意して、 `<f2>-K` で 出来上がったファイルを read only で og-agenda-list を開くようにしてみた。

(defun my-khal2org ()
  "Convert khal ics file to org file."
  (interactive)
  (let* ((exepath (expand-file-name "~/Documents/proj/icaltools")))
    (shell-command-to-string (concat "cd " exepath "; python khal2org.py"))
    ;; (find-file-read-only-other-window (expand-file-name "~/Documents/ownCloud/khal.org"))
    (org-agenda-list) ;; org-agenda を起動するようにした(201911)
  ))

pythonのスクリプトは、 icalendar(GitHub) というライブラリを使ったのだが、 いつもの様に、このドキュメントだけでは私には無理なので、 ical2org-two(GitHub) のソースを参考に、 粛々とコピペ修正作業。

まあ、無くても良いが、有ってもよいかな、というレベルか。 カテゴリや期間をemacsから指定できるようにしてみたいが、道は遠そうだ。

2019年8月12日月曜日

Garmin の 心拍計を装着するチェストベルト交換

Garmin の心拍計のチェストベルトを交換した。 今回が3本めだったような記憶だが、破断は始めてだと思う。 装着していて、突然切れた。これまではゴムが伸びて交換だったはず。

今回は、正規品が高価なので、互換品を試すことにした。例えばamazonで比較すると以下。 当然というか、CATEYE にした。

センサーは、電池の蓋にあるパッキンが怪しくなってきてるような古いやつ。 ベルトに取り付けると、装着面がフラットにならない。 気になる人にはダメかもしれない。

ベルトの接続部はこのような、ひっかけるタイプなので、これには注意が必要。 「ゆるゆる」に装着していて外れることがあった。 ジョイントのセンサー側が上になるようにして「ゆるゆる」にせず試してみている。

最近、測定データが実感と異なると感じることが多々あったが、 センサーではなく、ストラップの導電性の問題だったのかもしれない。 交換した後は安定してるように思う(ふらしぼ?)。
特に夏場は、心拍数から休息時間を考えて、 熱中症とかポックリとか気に掛けるようにしてるので、 実は「やば」かったのかも。

今のところ、安定して使えているので、まあ満足。

2019年8月3日土曜日

Emacs と Vim で ちょっとしたメモを共有したい

Emacs と Vim で ちょいとしたメモを共有しようとやってみた。 けっしてスマフォとの共有ではないし、 書捨てで良いようなメモを、という位置付け。

emacs では org-mode をメインにしているが、 org-mode は emacs環境限定?なので、 常に emacs を起動している訳ではない自分は、 ちょいっとメモ、ができない状況が時々ある。

そんな時、簡単にメモる手段が欲しくて、 terminalで mattn/memo(Github) + fzf + vim を使っていた。 jrnl とか、 khal をメモに、 とか試したが、結局こいつに落ち着いていた。

で、これらのメモを emacs で扱えないかと考えた次第。

めもしたものは、markdown ベースなので、 手間を惜しまなければ問題はないが、 そこは、なんぞ方法があるに違いないと探してみた。 今回使ったみたのは、Deft for Emacs

mattn/memo(Github) と共有させるため、 既存ファイルの format を修正する手間が必要だったが、 なんとなく、org配下で扱えるようになったかも、と思う。

  • Deft for Emacs の設定

    保存は、org-directory下にした。 deftでは、以下の操作ができる。

    • rename (C-c C-r)
    • delete (C-c C-d)
    • New (C-c C-n)
    • archive (C-c C-a)
    • quit (C-c C-q)

    archiveはサブディレクトリがデフォルト。 org-captureの設定もしたが、必要なかったように思う。

    絞り込み操作が、ivyになってないのは少し残念。

  • ;; deft
    (use-package deft :ensure t
      :bind ("<f7>" . deft)
      :commands (deft)
      :config
       (setq deft-directory "~/Documents/ownCloud/_posts"
       deft-extensions '("md" "org")
       deft-auto-save-interval 3.0
       deft-use-filename-as-title t)
     )
    
    ;;
    (defun my/generate-md-memo-name ()
      (setq my-org-note--name (read-string "Name: "))
      (setq my-org-note--date (format-time-string "%Y-%m-%d"))
      (setq my-org-note--dtime (format-time-string "%Y-%m-%d %H:%M"))
      (expand-file-name (format "%s-%s.md" my-org-note--date my-org-note--name) "~/Documents/ownCloud/_posts"))
    ;;
    
    ;; org-capture
     ; .......
      ("n" "note(mkd)" plain
     (file my/generate-md-memo-name)
     "%(format \"---\ntitle: %s\ndate: %s\n---\n\n# \" my-org-note--name my-org-note--dtime)%?")
     ; .......
    
  • memo の設定

    • `~/.config/memo/config.toml`

      memodir = "~/Documents/ownCloud/_posts"
      memotemplate = "~/.config/memo/template.txt"
      editor = "nvim"
      column = 26
      selectcmd = "fzf"
      grepcmd = "ag ${PATTERN} ${DIR}"
      assetsdir = "."
      pluginsdir = "~/.config/memo/plugins"
      templatedirfile = ""
      templatebodyfile = ""
      
    • `~/.config/memo/template.txt`

      ---
      title: {{.Title}}
      date: {{.Date}}
      ---
      
      # {{.Title}}
      

左が、emacsのdeft、で右が memo + fzfl。

メモファイルを org 配下に置くので、 deadgrep,counsel-rgとかの検索対象になるから、大きなメリットにならないかもしれないが、 スコープを限定したハンドリングが可能になったのはひとつ前進だと思っている。
暫く放置して、様子見。

Emacs の lsp の設定、なう(202310)

前回さらしてから、さらに1年。そう、3年めになる。 が、今回は一段と自信がない。 環境は、 Debian GNU/Linux 12 (bookworm) + emacs(29.1)。consult + company。 embark は未だに使ってない。 用途は、メモ と ...