2019年7月26日金曜日

Emacs org-capture で サブメニュー

以下のサイトによると、 org-mode の キャプチャでサブメニュが使えるという。 マニュアルにあるという。まあ私が読むはずもないが、 と思って見てみたが記載は見当たらなかった。emacsのhelpの方にはある。 (`<f1> org-capture-templates`)

Emacs oeg-mode は使ってるが、org-capture 積極的に使っているとはいえない。 ジャンプして書き込みすればよい、という感じ。

だが、キャプチャメニュにサブが指定できるのなら、細かく対応させれば、メニューすっきり、便利かもしれない。

まだ、設定に間違いがあるみたいで、Abortでエラーがでるけど、気にしない。

  • キャプチャメニュ(`...`がサブメニュあり)
  • サブメニュ

視認性は良くないが、キーを覚えれば問題なさそう。 少し使ってみようと思う。

2019年7月16日火曜日

Emacsでformatterを試してみる

Emacs上で、コードの整形をやってくれる、formatterの設定をやってみた。

pythonについては、なんとなく塩梅が分るようになった気がしているが、その他は全滅なので HUGO を触るのに不便に感じたのでやってみた。

試したのは、 format-all、 prettier、 js-beaytify。

prettier と js-beaytify では、prettierの方がメジャーみたい。

1 prettier

  • GitHub - prettier/prettier-emacs: Minor mode to format JS code on file save

  • 対応しているのは、 flow、babylon、typescript、css、less、scss、json、json5、json-stringify、 graphql、markdown、mdx、vue、yam、html など。

  • save する時に自動でやると、反応が遅いので、不快になる。

    (use-package prettier-js :ensure t :defer t
     :diminish (prettier-js-mode . "-prett")
     ; :hook (
     ;   (yaml-mode . prettier-js-mode)
     ;   (json-mode . prettier-js-mode)
     ;   (html-mode . prettier-js-mode)
     ;   (web-mode . prettier-js-mode)
     ;   (css-mode . prettier-js-mode))
     :config
      (setq prettier-js-command "~/.yarn/bin/prettier")
      (setq prettier-js-args '(
        "--trailing-comma" "all"
        "--bracket-spacing" "false"
      ))
    )
    

2 web-beautify

3 format-all

  • GitHub - lassik/emacs-format-all-the-code: Auto-format source code in many la…
  • 外部の formatter を使うので、自分で用意する。
  • できる範囲で formatter をインスト。私には不要なものを含めて。(debian buster)。
    • prettier(Angular/Vue GraphQL Markdown TypeScript/TSX CSS/Less/SCSS JavaScript/JSON/JSX
    • clang-format (Java + C/C++/Objective-C Protocol Buffers)
    • Rust (rusfmt), Go (gofmt), Haskell (brittany), Python (black)
    • Ruby (rufo), Emacs Lisp (emacs), HTML/XHTML/XML (tidy)
    • SQL (sqlformat), Perl (perltidy), Shell script (shfmt)
    • Assembly (asmfmt(go)), Clojure/ClojureScript (node-cljfmt)
    • YAML (yq -> yq.v2)
  • インストしてないやつ
    • Crystal (crystal tool format), D (dfmt)
    • Elixir (mix format), Elm (elm-format)
    • Kotlin (ktlint), Lua (lua-fmt)
    • OCaml (ocp-indent), Swift (swiftformat)
  • なんにでも対応しているみたいで、素人の私にはこちらが良さそう。

    (use-package format-all :ensure t :defer t
     :bind (:map prog-mode-map
            ("<M-f8>" . format-all-buffer)
    ))
    

4 hydra でメニューに加える

‘C-x C-s’ が手に馴染んでいて、その度に一瞬待たされるのが嫌で、 hydra に登録して、手動で実行するようにした。

(defhydra hyd-dict (:hint nil)
  "dic, spell and formatter"
  ("G" skk-get "get dic(web)" :column "skk")
  ("E" skk-edit-private-jisyo "edit p jisho")
  ("w" lookup-pattern "lookup word" :column "lookup")
  ("r" lookup-region "lookup for region")
  ("W" eww-search-words "eww-search")
  ("s" ispell-word "ispell word" :column "flyspell")
  ("b" flyspell-buffer "ispell buffer")
  ("t" powerthesaurus-lookup-word-at-point "at point" :column "thesaurus")
  ("T" powerthesaurus-lookup-word "word")
  ("d" powerthesaurus-lookup-word-dwim "dwin")
  ("f" format-all-buffer "format-all" :column "formatter")
  ("h" web-beautify-html "beautify H")
  ("c" web-beautify-css "beautify C")
  ; ("p" prettier-js "prettier") ;; not work prettier-mode disable
  ("q" nil "Exit" :exit t :column "Quit")
  ("." nil "cancel" :color blue)
)

ここのメニュに加えるはどうかと思うが、これでしばらく試してみる。

メモしてる時とかは、’fill-paragraph’ とか ‘fill-region’ なのだが、 これさえ使ってなかったことに気付いた。今更だが。

2019年7月9日火曜日

Emacs の ox-hugo で HUGO

ローカルでメモの保存用に使ってみてるサイトジェネレータを、 Pelican から Hugo にしてみた。

150 post を越えて、速度がかなり問題だと思うようになったから。 Pelicanが遅いわけではないので、別ディレクトリに分ければよいのだが、 どうせ分けるなら、別のジェネレータでも試してみるか、ということ。

選んだのは Hugo

速度に関する評価が高いみたいで、 しかも emacs との連携が ox-hugo を使うと便利みたいだから。 (感謝)


hugo の 設定

Hugo 自体の設定は、いっぱい情報があるから省略。というか、細かい設定なんかは、私の理解の外。 html にして表示できれば満足だから。ただ、テーマは、

を試して、Mainroad にしてみた。

emacsでの使い方

ox-hugo をインストしただけで、これ自体の 設定は得にしてない。 こいつを使えば、org-modeで編集したものを、 org-modeの特徴を活かしつつ、 hugo の為に export をしてくれるという。 org-mode(oxとか)が使えていることが前提だが。

基本的な使い方は、公式ドキュメントや先人方の情報のおかげで、なんとかなる。あとは、 hugo用のorgファイルと、org-capture の設定を自分用に用意する。

結局以下のようにして、一応動いているようだ。

解説をちゃんと読めばよいのだが、私には十分かも、と思っている。

hugo用のorgファイル(0730up)

#-*- mode: org -*-
#+CATEGORY: blogger_hugo
#+STARTUP: contents align shrink
#+OPTIONS: AUTHOR:nil
#+HUGO_BASE_DIR: ~/Documents/mup/blogg-hugo
#+HUGO_AUTO_SET_LASTMOD: t
#+HUGO_SECTION: posts

* build [2019-07-11] 追加 
#+BEGIN_SRC shell
cd ~/Documents/mup/blog_hugo
hugo
#+END_SRC

* Posts
** DONE posting test 1              :@hugo:setup:
CLOSED: [2019-07-05 金 10:40]
:PROPERTIES:
:EXPORT_FILE_NAME: 20190705_1st-post
:EXPORT_HUGO_FRONT_MATTER_FORMAT: toml
:EXPORT_HUGO_SECTION: posts
:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :archives 2019/07
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :series [debian hugo setup]
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :toc 2 :num t
:END:


ここは、アブストラクトとして、記事リストに表示される部分。

<!--more-->

これ以降が、本文という位置付けだが、アブストラクト部分も本体に表示されるので、
そのような構成にする必要がある。

exportすると、posts ディレクトリに出力される。
  • HUGO_BASE_DIR で、hugoのディレクトリを指定。
  • HUGO_SECTION の default は ox-hugo の設定や、 orgファイルの先頭部分でも指定できる。 hugo_base_dirに無ければ、作成してくれる。
  • post する時のファイル名は、タイムスタンプと名前でorg-captureで作成。
  • org-mode のタグは、 @ 付きが category、他がtag。
  • :toc 2 は、2レベルの目次
  • :num t で番号付きにできるようだが、私の環境では、記事での設定は、NG. ox-hugo の設定で指定すればOK。

    (setq org-hugo-export-with-section-numbers t)

  • TODO なら ドラフト。DONE にすると公開。

  • list や weblink は普通に使える。

  • 画像ファイルの指定は注意が必要。

    • 同一ディレクトリに画像ファイルがあれば、 ‘static/ox-hugo’ にexport時にコピーしてくれる。

      [[./rimg3576.jpg]]
      file:rimg3576.jpg
      
    • サブディレクトリに画像ファイルを置く場合は、自分でコピーする必要があるようだ。例えば、src=“./imgs/rimg3576.jpg” にするなら、以下。

      [[file:./imgs/rimg3576.jpg]]
      file:./imgs/rimg3576.jpg
      

追記: ひとつのファイルにまとめようとすると、結構多きくなるのに今更気付いた。 で、org-refile のターゲットに新しいファイルを追加することにする。

org-captureの設定(0730up)

公式ドキュメントの方法を使うべきなんだろうが、理解できないので、こんな風になった。

(defun my/generate-post-name ()
  (setq my-org-note--name (read-string "Name: "))
  (setq my-org-note--dtime (format-time-string "%Y%m%d-%H%M"))
  (format "%s_%s.md" my-org-note--dtime my-org-note--name))
;;
...
(setq org-capture-templates  '(
...
...
    ("ph" "hugo new post" entry
      (file+olp "blog_hugo.org" "Posts")
      "** TODO %? \t:@debian:\n:PROPERTIES:\n\
:EXPORT_FILE_NAME: %(my/generate-post-name)\n\
:EXPORT_HUGO_FRONT_MATTER_FORMAT: toml\n\
:EXPORT_HUGO_CUSTOM_FRONT_MATTER: :archives %<%Y\/%m>\n\
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :series hugo\n\
:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :toc 2 :num t
:END:\n\n\n\nl<!--more-->\n")
...
 ;; (0730) archives の年月を自動、 del `+`
...
))
...
  • Posts配下に作成
  • 名前だけは入力するようにした。
  • tag や archives なんかはデフォを指定しているだけ。
  • series はhugo側で別途設定が必要みたい。
  • toc をデフォで有にしおく。
  • テーマによって使えなかったり使えたりがある。

一応動いているようだ。
markdown や reStructuredText を直接書いたり、 exportしてからのコピペが不要になるので、かなり楽になると思う。

あとは、使える/使えないを経験しながらでよういだろう。
とりあえず、これで良しとしよう。

2019年7月6日土曜日

コマンドラインツールをふたつ、インストしてみた

コマンドラインのツールをふたつ、インストしてみた。 ネタ元は、 ここ

  1. fdupes 二つのディレクトリを比較して、重複ファイルを表示。

    INSTALL の記述どおりにインストすればよいだけだった。 たまに、こんな機能が欲しい時がある。ただ、 delete オプションは怖いので、基本使わない。

    debian のパッケージにもあった。(1:1.6.1-2 amd64)

    $ fdupes -R ezjnxwin-v0.54beta-2019 ezjnxwin-v0.52beta-2016/
    
    ezjnxwin-v0.54beta-2019/NoMap.jpg
    ezjnxwin-v0.52beta-2016/NoMap.jpg
    
    ezjnxwin-v0.54beta-2019/System.Data.SQLite.DLL
    ezjnxwin-v0.52beta-2016/System.Data.SQLite.DLL
    
    ezjnxwin-v0.54beta-2019/ol3map.html
    ezjnxwin-v0.52beta-2016/ol3map.html
    
  2. pet コマンドラインのスニペット

    fdupes のように、たまにしか使わないヤツは忘れるので、 スニペットにしておきたいということで、インストしてみた。

    既に goenv はインストしてあるので、導入自体は以下で簡単。

    $ go get github.com/knqyf263/pet
    

    どっとbashrc の設定では以下を追加したのだが、 環境によって設定が異なるようで、素人なもので、 直すのに結構時間がかかってしまった。

    function prev() {
      PREV=$(echo `history 2 | head -n1 | sed -E ' s/ [0-9]*  [0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*//'`)
      sh -c "pet new -t `printf %q "$PREV"`"
    }
    # 
    function pet-select() {
      BUFFER=$(pet search --query "$READLINE_LINE")
      READLINE_LINE=$BUFFER
      READLINE_POINT=${#BUFFER}
    }
    bind -x '"\C-x\C-r": pet-select'
    

    本来はリモートでも使えるように、syncさせたりするのだろうが、 私には無縁。
    私が使うのは、以下ぐらい。

    • pet list / pet search :: 登録コマンドのリスト表示
    • pet exec :: fzf で、選択実行
    • prev :: 直前のコマンドを登録
    • pet edit :: 登録コマンドの編集

なんか、使っていけそうな感触。
スニッペト関係では、 以前インストした sniboxがあるのだが、 メモリ食いだし、大袈裟すぎるので、使わなくなって、起動もさせてない。 そもそも目的が違うか。

2019年7月3日水曜日

とある駐車場の車止めポール

ポタリングで、とある駐車場で、止ってしまった。

車止めポール、真っ直ぐのやつの方が少ない、と思った。
遊んでてこうなったのか、車でやったのか。

私の力では、わずかにスプリングが曲るだけ。
スプリングに残留変形が生じるまでとは、なかなかのものだと感心。

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

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