2019年3月28日木曜日

Emacsのdired関係を見直し

今回は、ファイルとかディレクトリのハンドリングということで、 dired関係を見直している最中。基本はいつもどおり、コピペ。

dired-aux.eldired-x.eldired-+ とかもあるみたい。 前者のふたつはビルドインで、プラスはサードパーティ。

不便に感じたら、改めて考えよう。

dired-async-modeで非同期処理とffap

; async                                            
(use-package async :ensure t                       
 :config                                           
 (progn                                            
  ; Dired async.                                   
   (use-package dired-async                        
    :config (dired-async-mode 1)                   
   )                                               
  ; Byte compilation async.                        
   (use-package async-bytecomp                     
    :config                                        
    (async-bytecomp-package-mode 1)                
    (setq async-bytecomp-allowed-packages '(all))) 
  )                                                
)                                                  
; ffap                                             
(ffap-bindings)                                    

私に、dired-async-modeは必要なさそうだけど、 magitでrequireされるようなので、設定してみた。

ffapは、find-file-at-pointの略でビルトインで、 ファイルを開く操作の強化パッケージ。 一応入れているが、使ってないように思う。 自分が気付いてないだけかもしれないので、そのまま。

diredへの入口は、 counsel-find-filedired-jumpbookmark-jump-other-window で間に合っているように思う。

dired関係と wdiredの設定

色々設定したが、多すぎたかも。 後で削除することになるかも。

(use-package dired :ensure nil                                                              
 :bind (("C-x C-j" . dired-jump)                                                            
        ("C-x x" . dired))                                                                  
 :config                                                                                    
 ; Omitting                                                                                 
 (setq-default dired-omit-files "^.+~$\\|^.+#$\\|^\\...+$\\|\\.out$\\|\\.snm$\\|\\.tar.gz$")
 (setq-default dired-omit-mode t)                                                           
 ;; Dired listing                                                                           
 ;;  -a : Do not ignore entries starting with .                                             
 ;;  -l : Use long listing format.                                                          
 ;;  -G : Do not print group names like 'users'                                             
 ;;  -h : Human-readable sizes like 1K, 234M, ..                                            
 ;;  -v : Do natural sort .. so the file names starting with . will show up first.          
 ;;  -F : Classify filenames by appending '*' to executables,                               
 ;;       '/' to directories, etc.                                                          
 (setq dired-listing-switches "-alGhvF --group-directories-first")                          
                                                                                            
 ;; https://kakurasan.blogspot.com/2015/05/dired-filemanager-renamer.html                   
 ;; 新規バッファを作らずに移動するコマンド "dired-find-alternate-file" は                   
 ;; 標準では無効化されているので、使用したい場合は下の記述で有効にする                      
 (put 'dired-find-alternate-file 'disabled nil) ;; 使ってないと思う。                       
 (setq dired-recursive-deletes 'always)  ;; always delete and copy recursively              
 (setq dired-recursive-copies 'always)                                                      
 (setq dired-isearch-filenames t)        ;; C-s 時にファイル名だけにマッチ                  
 (setq dired-dwim-target t)              ;; 2画面なら他方にコピー                           
)                                                                                           
                                                                                            
;; filter dynamically by type (swiperがあるから不要かも)                                    
(use-package dired-narrow :ensure t)                                                        
                                                                                            
;; Reuse the current dired buffer to visit a directory                                      
(use-package dired-single :ensure t                                                         
  :config                                                                                   
  (define-key dired-mode-map [return] 'dired-single-buffer)                                 
  ;; (define-key dired-mode-map [mouse-1] 'dired-single-buffer-mouse)                       
  )            
                                    
;; Collapse unique nested paths in dired listing 
(use-package dired-collapse :ensure t :defer 
  :init             
  (add-hook 'dired-mode-hook 'dired-collapse-mode))
              
;; Insert subdirectories in a tree-like fashion 
(use-package dired-subtree :ensure t) 

;; dired-ranger  copy paste move を簡単に
(use-package dired-ranger :defer t :ensure t 
  :config                                                                  
  (setq dired-ranger-copy-ring-size 1)                                     
    (define-key dired-mode-map (kbd "C-w")                                 
        (lambda ()                                                         
            (interactive)                                                  
            (dired-ranger-copy nil) ; t adds item to dired-ranger-copy-ring
            (define-key dired-mode-map (kbd "C-y") 'dired-ranger-move)))   
    (define-key dired-mode-map (kbd "M-w")                                 
        (lambda ()                                                         
            (interactive)                                                  
            (dired-ranger-copy nil)                                        
            (define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)))  
)                                                                          
;
;; wdired  included from ver 24
(use-package wdired :defer t :ensure nil
  :bind
   (:map dired-mode-map
   ("r" . wdired-change-to-wdired-mode))  ;; 20190414
  :config (setq wdired-allow-to-change-permissions t))                                      

uniquifyで名前を扱いやすく

別ディレクトリ同一ファイル名を区別しやすくするための設定。 デフォルトの機能をオーバーライドしているらしい。

(use-package uniquify :ensure nil                                           
 :config                                                                    
 (setq uniquify-buffer-name-style 'forward)                                 
 (setq uniquify-separator "/")                                              
 (setq uniquify-after-kill-buffer-p t)    ; rename after killing uniquified 
 (setq uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers 
 (setq uniquify-buffer-name-style 'post-forward-angle-brackets)             
 (setq uniquify-ignore-buffers-re "*[^*]+*")                                
 )                                                                          

sxivも使う

diredからsxivのサムネイルモードを起動させるためのもの。

有難いです。

;; https://gist.github.com/kobapan/28908b564b610bd3e6f3fae78637ac8b
(defun call-sxiv ()                                                                 
  (interactive)                                                                     
  (let ((image-files  ; 画像ファイル名のリスト                                      
        (delq nil     ; この辺はemacs26辺りで filterマクロに置き換えか?            
            (mapcar                                                                 
              (lambda (f)                                                           
                (when (string-match "\.\\(jpe?g\\|png\\|gif\\|bmp\\)$" f)           
                    f))                                                             
              (directory-files default-directory)))))                               
               ; 現ディレクトリ内のfileリスト in alphabetical order                 
    (start-process-shell-command  ; シェルコマンドを非同期実行                      
     "sxiv" nil ;プロセス用のバッファを開かない                                     
     (format "sxiv -f -t -n %s %s"                                                  
             (length image-files)  ; 画像ファイルの個数=最後の画像ファイル          
             (mapconcat 'identity image-files " ") ))))  ; リストを空白区切りで連結 

hydraでメニュー化して使う

hydra wikiのdiredの設定 をアレンジした。 全部動作するかは、未確認。

sxivbookmark-jump-other-window は、便利かと思って追加した。

wdiredは、hydraのメニューを閉じないと使えないみたいなので、 タイトルに追記しておいた。

(defhydra hydra-dired (:hint nil :color pink)   
  "Dired(wdired run hydra menu off)"                
  ("m" dired-mark "mark" :column "Mark") 
  ("u" dired-unmark "unmark") 
  ("U" dired-unmark-all-marks "unmark all")  
  ("E" dired-mark-extension "by ext.")
  ("T" dired-toggle-marks "toggle all")    
  ;
  ("c" dired-ranger-copy "copy" :column "ranger")
  ("p" dired-ranger-paste "paste")
  ("M" dired-ranger-move "move")  ;; fixed(0419)
  ;
  ("C" dired-do-copy "copy" :column "File") ;; Copy all marked files    
  ("D" dired-do-delete "delete")     
  ("G" dired-do-chgrp "chgrp")   
  ("M" dired-do-chmod "chmod")         
  ("v" dired-view-file "view") ;; q to exit, s to search, = gets line #  
  ;                            
  ("+" dired-create-directory "mkdir" :column "dir")      
  ("w" dired-kill-subdir "rmdir")      
  ("i" dired-subtree-insert "show-subd")                       
  (";" dired-subtree-remove "hide-subd")                 
  ;        
  ("s" dired-sort-toggle-or-edit "sort" :column "Sel, Sort")  
  ("f" dired-narrow-fuzzy "filter")           
  ;; dired-narrow, dired-narrow-regexp,  dired-narrow-fuzzy        
  ("F" dired-do-find-marked-files "Find marked")   
  ("B" bookmark-jump-other-window "bkmark-list")            
  ;                
  ("g" revert-buffer "read all again" :column "disp")  ;; read all directories again (refresh)  
  ("l" dired-do-redisplay "redisplay")  ;; relist the marked or singel directory        
  (")" dired-omit-mode "toggle omit")  
  ("(" dired-hide-details-mode "toggle details")         

  ("d" diredp-ediff "pdiff" :column "disp, diff")  ;; smart diff  
  ("e" dired-ediff-files "ediff")                         
  ;                    
  ("A" dired-do-find-regexp "find regexp" :column "grep sync ..")   
  ("R" dired-do-rsynch "rsync")                            
  ("S" dired-do-symlink "symlink")                  
  ("Y" dired-do-relsymlink "r-symlink")  
  ;                                  
  ("z" diredp-compress-this-file "compress file" :column "comp, oters") 
  ("Z" dired-do-compress "Compress")                                      
  ("?" dired-summary "summary")                                  
  ("V" call-sxiv "sxiv current")                                   
    
  ("." nil "quit" :column "quit")   
) 
                                                                         
(define-key dired-mode-map "." 'hydra-dired/body)

2019年3月24日日曜日

pdfファイルをポスター(分割)印刷するのにpdfposterを使ってみた

最近、ポタリングにパンフレットを印刷したものを持ち出す機会が増えている。 素材はネットでゲットするのだが、pdf形式がほとんどだ。

しかし、Linux(debian buster)の印刷環境は、(私の技量では)不十分で、 月一度ぐらいWindowsを起動するだけだったのが、 印刷のための起動が増えてしまった。

どんなツールが不足かというと、 ポスター印刷 だ。 1ページを複数ページに分割して拡大して印刷したいのだ。 老眼だから。

これまでは、拡大表示させてキャプチャ、 印刷する、みたいなことをしてみたが、 さすがに面倒。 Windows上のadobeのアプリケーションを使うことになる。

で、Linux上で完結させるため、pdfの印刷までに係るツールを再確認してみた。

  • pdfarranger : ページの入れ替え、回転、削除、マージ

    pdfarranger: Small python-gtk application

    よく使っていたpdfshufflerの後継。crop機能は追い付いてない。プレビューしながら作業できる。

  • krop : クロッピング(余白の調整)

    krop: This is a python/Qt app which can be used to crop pdf

    いまひとつだと思うのだが、たまに使う。プレビューしながら作業できる。

  • pdfposter : ページを複数に分割して出力。今回、調べなおしたツール。

    pdfposter·GitLab

    インストしてたが使えてなかった。

    ここの例 を参考に確認してみた。左側が元で右側がアウトプット。

    • シングルページで、用紙方向、中身のレイアウトともにポートレイト。

      • $ pdfposter -p 2x1a4 s-po-po.pdf output.pdf

      • $ pdfposter -ma5 -p 1x2a4 s-po-po.pdf output.pdf

      • $ pdfposter -p 2x2a4 s-po-po.pdf output.pdf

    • シングルページで、用紙方向がランドスケープ。

      • $ pdfposter -p 2x1a4 s-la-po.pdf output.pdf

      • $ pdfposter -p 2x2a4 s-la-po.pdf output.pdf

    • 複数ページのランドスケープから、ページを指定して分割。

      • $ pdfposter -f 2 -l 2 -p 2x1a4 m-la-la.pdf output.pdf

    • 指定したサイズに分割する。

      • $ pdfposter -m10.5x9.9cm -p 1x1a4 s-po-po.pdf output.pdf

    • -s は、単独で使う。

    ポートレイトを並べたレイアウトへの分割が基本みたい。 ランドスケープが指定できると嬉しいかも、と思ったりする。

    あと、ラップが指定できないのも残念。アナログ人間の希望か。

一応、これで複数ページへの分割印刷ができる。
もしかしたら、 imagemagicとかpythonとかでスクリプトがあるのかもしれない。
ラスターイメージにしておいて加工するのなら、自分でも、と妄想してみるが、 まずは探してみるか。も。

2019年3月22日金曜日

冬用サイクリング手袋がそろそろダメなのかも

先日、自転車で出掛けたとき、 パールイズミの冬用手袋の縫い目が割けてきていて、 インナーが覗ける状態なのに気付いてしまった。

防寒性能が低くなってるとは感じていたが、 何かがブレークしたのかもしれない。

表面の滑り止めなどは、とっくに無いのだが、 ついに、冷気の侵入が気になり始めたということだろう。

帰宅して確認してみると、各所で縫い目が割けはじめているし、 アウターシェルの生地が薄くなっている。 冬用なので、インナーを外さないと修理とか難しそうだし、 私には無理そう。

今シーズンはもう不要かもしれないが、来シーズンのために、 何か貼り付けて修理できないかと探すと、修理の紹介をしている記事をみつけた。

指先は微妙な部分だけど大丈夫よ、と勇気づけられる。500円ほどの出費だし。(しかし、皆さんの手袋、きれい)

ただ、防風とか断熱とか不安。 冬季はこれひとつで通してるので、なにか勘違いのような気もする。 伸縮性があって防風で薄くて、断熱が期待できる補修用布なんてあるのかな。

冬物一掃、処分セールとかを探すのが先決かも。

2019年3月15日金曜日

ポタリングのお供にポータブルラジオ ELPA ER-37Fを試す

ラジオを買ってみた。走ってみた。

自転車でポタリングする時に使っているポータブルスピーカーを、 分解ではなく破壊してしまったので、 一度はラジオを試そうと思い、安い?ラジオを購入した。

ELPA ER-37F で近所の家電量販店で1980円だった。 スピーカーで聴くことを前提に選んだ。 980円のラジオもあったが、少し怖いので止めた。

小型のフロントバッグに入れて実走してみたが、散々だった。

受信が安定せず、感度が悪いと感じる。小休止の時だけ使えるという印象。ロッドアンテナが兎に角邪魔。AMは絶望的かも。

ロッドアンテナを止めてみた

そのままお蔵入りさせるのは抉に触るので、 改造してみた。といっても、ロッドアンテナをリード線に交換しただけ。 リード線はハブダイナモ化した時の残りなので費用ゼロ。

作業はいたって簡単。イモネジで組立られているので分解は問題無い。 ただ、内部のリード線とかがとても細いので注意が必要。 一度、電池ボックスの線を切ってしまった。 ロッドアンテナもイモネジで止めてあるだけなので、リード線をイモネジで留めた。

室内で試してみると、アンテナ交換で感度が安定したように思う。ピークはさほどではないが、許容範囲が増えた印象。 リード線の這わせ方とかで感度が変化してくれるので、機能しているのだろう。 ラジオは、まったく知識不足だが、きっとリード線の長さとかもあるのだろう。

実走したみたが、平場ではかなり良い。 ロッドアンテナを突き出す必要はないし、 感度が悪くなったら、フロントバッグから垂らす向きを変えてみれば良い。 片道50kmほどで1度の変更だった(wide FM)。

ただ地形に左右されるので、小休止で受信を試みても無理な場所がある。 あと、スピーカーの音量不足。 ボリュームアップすれば聞き取り難くなる。 この辺りがポータブルラジオなのだろう。

マイクロSD再生可能なポータブルスピーカーがやはり必要ということみたいだ。 さて、悩ましい。破壊からの救済を試みるか。

なお、アンテナ改造が私には無理っぽいAMは諦めた。

[201905] モバイルバッテリーを使うと、受信しなくなる。 radioの問題か、バッテリーの問題か?さてどうしようか、暫くなやみそうだ。
まあ、モバイルバッテリーなんて、滅多に使わなにので、問題ないといえばそうなんだが。

2019年3月6日水曜日

静的サイトジェネレータ Pelican のキャッシュを設定してみた

キャッシュを有効にする

静的サイトジェネレータに Pelican (4.0.1)を使っている。 org-modeでメモがある程度まとまると、 ブログの記事みたいにして、QNAPのwebサーバーへ放り込み、org側はArchivingするという具合。

テーマは、最初のころ pelican-bootstrap3 を使っていたが、 記事が増えてmakeで待たされるので、 軽くてシンプルなテーマだと思って foundation-default-colours を使っていた。

それでも30秒を優に越えるようになってきた。 まあ、家さばにアウトプットさせてるのが主な原因(ローカルだと30%ぐらい)。

Done: Processed 124 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 35.08 seconds.

そこで、高速化する方法について調べると、 cacheを設定する方法が公式の ドキュメント にあるのをみつけた。 具体的には、 pelicanconf.py の共通部分に以下を追加した。

CACHE_CONTENT = True
LOAD_CONTENT_CACHE = True
CHECK_MODIFIED_METHOD = 'mtime'
CONTENT_CACHING_LAYER = 'generator'

結果、25%ほど速くなった。

Done: Processed 124 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 25.66 seconds.

けど。。。。 この程度では満足できない。システムのキャッシュが有効なのかもしれないし。 試しに pelican-bootstrap3 にテーマを戻してみると、 なんと半分ほどの時間で済んだ。

;; キャッシュ無効で、makeすると、                                                                     
Done: Processed 124 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 18.18 seconds.   
                                                                                                      
;; キャッシュ有効で、新しい記事を追加すると、                                                         
Done: Processed 127 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 14.56 seconds.   
                                                                                                      
;; キャッシュ有効で、pluginを変更すると、                                                             
Done: Processed 128 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 35.62 seconds.   

速度を評価するための環境をつくった訳ではないが、 まあ、キャッシュを有効にすることで、 25%ぐらいは短縮が期待できそうなので、ヘマしたことの追求はやめた。 コピペの落とし穴か。

pluginを追加すると台無し

ところで、makeが早くなったので、pluginを増やしてしまった。 加えたのは、 related_postspelican-toc 。 但し、bootstrap3の場合。

これは、 pelicanをbootstrap3のテーマで使っている サイト を見付けたから。

設定の説明とかあるがドイツ語。 なんとなく設定方法がわかるかも、という感じ。 bootswatchを新しいものに交換しているようだが、 理解できないので、その部分はさわってない。

related_posts の設定

  • pelicaconf.pyの PLUGINSに 'related_posts' を追加。他の設定は無し。
  • 'hogehoge/themes/pelican-bootstrap3/templates/includes/related-posts.html' の変更は止めた。

pelican-toc の設定

  • pelicaconf.pyの PLUGINSに 'pelican-toc'を追加して、 以下を追加(READMEのまま)。

    TOC = {                                                                        
        'TOC_HEADERS'       : '^h[1-6]', 
        'TOC_RUN'           : 'true',
        'TOC_INCLUDE_TITLE' : 'true',
    }                                                                              
    
  • 'hogehoge/themes/pelican-bootstrap3/templates/includes/toc.html' を新規作成。

    {% if article.toc %}
    <div class="entry-content">
    <h3> Table of content: </h3>
    <ul>
        {{article.toc}}
    </ul>
    </div>
    {% endif %}
    
  • 'hogehoge/themes/pelican-bootstrap3/templates/article.html' に一行追加。

    <div class="entry-content">
        <div class="panel">
            <div class="panel-body">
                {% include "includes/article_info.html" %}
            </div>
        </div>
        {% include 'includes/toc.html' %}  <!-- この一行 -->
        {{ article.content }}
    </div>                                                
    

結果は当然だが、また時間がかかるようになった。

;; キャッシュ有効
Done: Processed 128 articles, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 25.64 seconds.

related-postsはデフォではちょっと、という感じ。 記事毎に 'related_posts: slug1, slug2, slug3, ... slugN' を書き込みするのは面倒だし。 tagで良いように思う。
tocは欲しいかも。

pulugin2個追加で、時間が同等。 plugin追加は、やっぱりキャンセルか。悩ましい。

2019年3月2日土曜日

Emacsで文法チェックをやるflycheckの見直し?

私はDebian上のエディタは、emacs(26.1)をメインにしている。 まあ、vimが周辺をサポートしているのようなのだが。

用途は、org-modeをメモに使っているのと、少し長めのpythonスクリプト。 素人なので、コピペ基本の設定である。

今回は flycheck について見直してみた。

各種言語で書かれた文書に対して文法チェックを行うプログラムをlintというらしい(wikipedia)。 実行したりコンパイルしたりする前にチェックするためのもの。

flycheckは、 Flycheck is a modern on-the-fly syntax checking extension となっている。 syntax checkerとlintの違いがよく分らないが、 実質的なチェックは別プログラムがやっているので、 lintを利用する仕組みと考えればよいのかもしれない。

なので、lintがshellとかで使えるのが前提で、各種lintの設定は必要に応じて別途行い、 emacsの方では、lintの起動と結果受け取りが設定されてるみたい。 以前、pathが反映されてなくて動かないことがあった。

対応している言語は多く、どの言語にどのlintを使うかは、 Supported Languages に説明されている。

私の場合は、python, markdown, rest, textに対応できれば良いが、 一応、色々インストしてみている。shell, perl, html, cssとか。 使うかどうかは別の話。

あと日本語の文法チェックをtextlintに設定してみた。 チェック時間が多めだし煩いので、普段はproselint(文法ではないらしい)、 たまにtextlintを使う。で、いつも沢山しかられる。

まず、flycheck。

   (use-package flycheck :ensure t
   :init (global-flycheck-mode)
   :config
    (setq
      flycheck-display-errors-delay 1
      flycheck-highlighting-mode 'lines  ;; columns symbolsm sexps lines
      flycheck-check-syntax-automatically '(save)
       ;; events that may trigger syntax checks.
       ;; save, idle-change, idle-buffer-switch, new-line, mode-enabled
      ;;flycheck-disabled-checkers '(c/c++-clang c/c++-gcc)
       ;; Syntax checkers excluded from automatic selection.
    )
    (set-face-attribute 'flycheck-error nil :underline '(:color "red3" :style wave))
    (set-face-attribute 'flycheck-warning nil :underline '(:color "orange2" :style wave))

    ;; mode hook を自分用にセットする。
    ;; 例えば、201902デフォは、proselintが以下で、rst-modeは含まれていない。
    ;;   :modes (text-mode markdown-mode gfm-mode message-mode org-mode)
    ;; 追加した。
    (flycheck-add-mode 'proselint 'rst-mode)

    ;; defaultのtextlintがrst-modeで動かなかったので、以下にしてみた。こぴぺ。
    ;; rst-modeで挙動が少しおかしい。
    (flycheck-define-checker textlint
     "A linter for textlint."
     :command ("/home/hogehoge/.yarn/bin/textlint" "--format" "unix"
                ;; "--rule" "no-mix-dearu-desumasu" "--rule" "max-ten" "--rule" "spellcheck-tech-word"
                source-inplace)
     :error-patterns
     ((warning line-start (file-name) ":" line ":" column ": "
        (id (one-or-more (not (any " "))))
      (message (one-or-more not-newline)
               (zero-or-more "\n" (any " ") (one-or-more not-newline)))
     line-end))
     :modes (text-mode markdown-mode gfm-mode message-mode adoc-mode mhtml-mode latex-mode org-mode rst-mode))
    (add-to-list 'flycheck-checkers 'textlint)

   ;; for python  私の環境ではflake8がうまく動かなかったので、pyflakeのみ。
   ;;   一部、設定ファイルが見付けられないので、指定(mypy使ってない)。
    (add-hook 'python-mode-hook
      (lambda ()
        (setq flycheck-disabled-checkers '(python-flake8))
        (setq flycheck-pylintrc "/home/hogehoge/.config/pylintrc")
        (setq flycheck-python-mypy-ini "/home/hogehoge/.mypy.ini")
      ))

      ; Multiple syntax checker for Python in Emacs, using Flycheck
      ;(use-package flycheck-pycheckers :ensure t
      ;   :config
      ;   (add-hook 'flycheck-mode-hook 'flycheck-pycheckers-setup)
      ;)

   ;; plantuml デフォで入ってないやつを、追加で入れる。
   (use-package flycheck-plantuml :ensure t
     :config
     (flycheck-plantuml-setup))
   )

textlintを日本語対応にするための設定は、以下を参考にさせていただいた。

現在、 ~/.textlintrc は以下になっている。 必要なmoduleをインストして設定を記述するのは結構面倒だった。 正しいかどうかは不明。いちおう動いているというレベル。

   {
    "plugins": {
      "rst": {
        "extensions": [
          ".rst"
         ]
       },
       "@textlint/markdown": {
         "extensions": [".mkd", "markdown"]
       }
    },
    "filters": {
        "comments": true,
        "whitelist": {
          "allow": [
             "ignored-word",
             "/{{[a-zA-Z.]*?}}/"
          ]}
    },
    "rules": {
      // 技術文書向けの textlint ルールプリセット
      "preset-ja-technical-writing": {
        // 1文の長さ
        "sentence-length": {
          max: 90
        },
        // 1文中のカンマ
        "max-comma": {
          max: 3
        },
        // 1文中の読点
        "max-ten": {
          max: 3
        },
        // 連続できる最大の漢字長 : 固有名詞は allow オプションに記述して回避できる
        "max-kanji-continuous-len": {
          max: 7
        },
        // 「ですます調」、「である調」を統一する
        "no-mix-dearu-desumasu": {
          // 見出しは自動
          "preferInHeader": "",
          // 本文はですます調
          "preferInBody": "ですます",
          // 箇条書きはである調
          "preferInList": "である",
          // 文末以外のチェックをしない
          "strict": false
        },
        // 文末の句点記号に「。」を使う
        "ja-no-mixed-period": false,
          // 二重否定は使用しない
          "no-double-negative-ja": true,
          // ら抜き言葉を使用しない
          "no-dropping-the-ra": true,
          // 逆接の接続助詞「が」を連続して使用しない
          "no-doubled-conjunctive-particle-ga": true,
          // 同じ接続詞を連続して使用しない
          "no-doubled-conjunction": true,
          // 同じ助詞を連続して使用しない
        "no-doubled-joshi": {
          // 助詞のtoken同士の距離が2以下ならエラー
          "min_interval" : 2,
          // 例外を許可するかどうか
          "strict": true,
          // 助詞のうち「も」「や」は複数回の出現を許す
          "allow": ["も","や"],
          // 文区切り文字の配列
          "separatorChars":
          ["。","?","!","?","!"]
        },
        // UTF8-MAC 濁点を使用しない
        "no-nfd": false,
        // 感嘆符「!!??」を使用を禁止する
        "no-exclamation-question-mark": false,
        // 半角カナを使用しない
        "no-hankaku-kana": true,
        // 弱い日本語表現の利用を使用しない
        "ja-no-weak-phrase": true,
        // 同一の単語を間違えて連続しているのをチェックする
        "ja-no-successive-word": true,
        // よくある日本語の誤用をチェックする
        "ja-no-abusage": true
      },
      // 日本語周りにおけるスペースの有無を決定する textlint ルールプリセット
      "preset-ja-spacing": {
        // カタカナ語間は中黒または半角スペースを用いて区切る
        "ja-nakaguro-or-halfwidth-space-between-katakana": true,
        // かっこの外側、内側ともにスペースを入れない
        "ja-no-space-around-parentheses": true,
        // 全角文字どうしの間にスペースを入れない
        "ja-no-space-between-full-width": true,
        // 半角文字と全角文字の間にスペースを入れるかどうか
        "ja-space-between-half-and-full-width": {
          "space": "never"
        },
        // 文末に感嘆符を使用し、後に別の文が続く場合は、直後に全角スペースを挿入する
        "ja-space-after-exclamation": false,
        // 文末に疑問符を使用し、後に別の文が続く場合は、直後に全角スペースを挿入する
        "ja-space-after-question": true,
        // インラインコードの前後が日本語である場合に半角スペースを入れるか
        "ja-space-around-code": {
             "before": false,
             "after": false
        }
        // "ja-space-around-code": false
      },
      // サ抜き、サ入れ表現の誤用
      "@textlint-ja/textlint-rule-no-insert-dropping-sa": true,
      // 漢字よりもひらがなで表記したほうが読みやすい副詞
      "ja-hiragana-fukushi": true,
      // 漢字よりもひらがなで表記したほうが読みやすい補助動詞を指摘する
      "ja-hiragana-hojodoushi": true,
      // 冗長な表現を禁止する
      "ja-no-redundant-expression": true,
      // 不自然なアルファベットを検知する
      "ja-unnatural-alphabet": true,
      // 常用漢字を使っているか
      //"joyo-kanji": true,
      // 連用中止法を検知する
      "no-renyo-chushi": true,
      // 全角文字と半角英字の間に半角スペース、ただし次の全角文字 [、。「 」(){}【】『』] の前後には不要
      // "one-white-space-between-zenkaku-and-hankaku-eiji": true
    }
   }
今回の見直しはこれでおわり。少しは使い易くなればと思う。

麻のボディタオル

2018年の秋(まだ、自転車を封印してない)、 近江上布伝統産業会館 で、興味からボディタオルを購入した。 お、よかった。: 自然派パン工房 ふるさとの道 ほぼ毎日風呂で使ってきて、ついに寿命がきたようだ。 お店の方に、「糸が痩せて破れてくる」まで使える、と...