電子竹林:Blog2

Tech関係、はてなダイアリーから移転済み...

Markdownでローカルなファイルにアクセス

概要

  • Markdownにローカルなファイルへのリンクを書くには、ちょっとしたプログラムでタイトル付きリンクにした方が便利

詳細

  • 文章はほとんどBearを使ってMarkdownで書いている
  • httpなリンクは便利に使っているが、ローカルなファイルへのアクセスはあまりMarkdown中に書いてなかった
  • そもそもmacosのURLスキーム"File:"がバギーでずっと使ってなかったが、現在は問題ないみたい
  • Bearでは単純にURLスキームfile:の後にファイルパスを書いてもいいが、maosだとファイルやフォルダ名に空白などが入る時は面倒なので、素直にタイトル付きリンクを使った方が便利
  • で、clipboardにあるフルパスのリストから、タイトル付きリンクのリストに変換しclipboardに入れ直すプログラムを書いた
  • フルパスをclipboardにコピーするには、Fiinderでファイルを選択 -> コンテキストメニュー(CTRL+クリック) -> さらにオプションキーを押すと”パス名をコピー"に変わるので、それを選ぶ
  • この後に下記プログラムを実行するとclipboardのフルパスのリストが、タイトル付きリンクのリストに置き換わる (主に実行はAlfredのworkflowから)
  • 運用として、ほとんどのリンクする様なファイルはDropbox上にあり、macosからだと相対的に同じパスになるので、異なるマシン間でも便利に使える。iOSではダメだけど。あとサーバー上のファイルだとダメ、そこはあとで考える予定..
def path2Linktitle(path):
  ''' return markdown linktitle of path
      ex. [[/Users/myname/foo](file:///Users/myname/foo), ... ]
  '''
  import urllib.parse
  return '['+ path +'](file://'+urllib.parse.quote(path, encoding="utf-8") + ')'

def cb2StrList():
  ''' copy clipboard to string list
  '''
  import pyperclip 
  return pyperclip.paste().split('\n')

def strList2cb(strList):
  ''' copy strng list to clipboard with \n
  '''
  import pyperclip
  pyperclip.copy('\n'.join(strList)) 

if __name__ == '__main__':
  strList2cb( [path2Linktitle(path) for path in cb2StrList()] )