端末エミュレータに対して、リージョンをクリップボードにコピーするための制御文字列(OSC52/PASTE64)をEmacsから投げる方法。Site端末エミュレータに対して、リージョンをクリップボードにコピーするための制御文字列(OSC52/PASTE64)をEmacsから投げる方法。terminal端末エミュレータに対して、リージョンをクリップボードにコピーするための制御文字列(OSC52/PASTE64)をEmacsから投げる方法。1)軽微な日本語の修正。2)使っていた別のパッケージで定義されていたreplace-in-stringをビルトインのものだと思いこんで使っていた問題と、cl.elの読み込みが必要であるloopマクロを読み込まずに使っていた問題を修正。それぞれビルトインの関数のみで動くように変更。リンク先のGistを修正しています。この問題は試された方からの指摘によって気づきました。ありがとうございました。書いていた部分を修正。後者はtmux限定のコピー用関数です。合わせてgistも修正しました。背景OSC52、またはPASTE64と呼ばれる制御文字列がある。これを活用することは、SSH先のホストでエディタ上に表示されているものをコピーしたいときに特に有効だ。端末上で普通に範囲選択をしてコピーする場合は、「見たままで」しかコピーできない。画面バッファを超えた範囲はコピーできないし、画面を分割していたり、エディタで行番号を表示している場合はそのままコピーされてしまう。この状況は、時々あって、割とつらい。リモートのエディタ上から直接この制御文字列を端末に投げることができれば、端末によって、つまりローカルで解釈されるため、投げられた文字列は直接OSのクリップボードにコピーされて嬉しい。そこで、いつも使っているEmacsからリージョン(選択範囲)内の文字列をこのOSC52/PASTE64制御文字列を送信することができるように設定した次第である。端末を設定する端末がOSC52/PASTE64を受け入れるように設定する。Term、RLogin、mltermの場合は[1:1]が参考になるだろう。Emacsを設定するAlexCharltonさんがいい感じのgistを上げてくださってるので利用させてもらう。https://gist.github.com/AlexCharlton/cc82001c407786f7c1f7このファイルはいくつかのシンボルを提供するが、重要なのは(osc52-set-cut-function)と、(osc52-interprogram-cut-function)の関数および、カスタム変数osc52-multiplexerだ。関数について、前者は環境変数TERMを使って利用すべき適切な制御文字列を設定する。後者はは第1引数で渡された文字列をクリップボードに送る。TERM=screenの時には、実際にはユーザはscreenではなくtmuxを使っている可能性がある。プログラムからは識別できないので、osc52-multiplexerに実際に使っているターミナルマルチプレクサを明示的に指定する。M-wでクリップボードに文字列がコピーできるようになる。改良版osc52e.elせっかくなので(osc52-send-region-to-clipboard)を予め含めるようにosc52e.elを改良したので貼っておく。gist:49eabc1978fe3d6dedb3ca5674a16ece:osc52e)でインストールできる。)このバージョンでは、制御文字列の選択についても改良しており、より多くの環境で適切に端末を推定できる。具体的には、以下の問題を解決している。環境によって?Emacsは内部的にTERMの値を"dumb"に変更する。"TERM")は"dumb"を返すため正しくターミナルを決定できない。そこで、Emacs起動時の環境変数を取得するinitial-environmentを見るようにした。tmuxユーザの中には、TERMを"screen"と申告するのではなく、潔く"tmux"にしたり、"tmux"の文字列をどこかに含める人もいる。この場合、osc52-multiplexerの値にかかわらずtmux用の制御文字列を使うようにした。逆に、元のバージョンではTERMが"screen"から始まらない場合(たとえ"tmux"であったとしても)osc52-multiplexerを無視して、ターミナルマルチプレクサを想定しない制御文字列が送信されるので注意が必要である。終わりに本記事は、実はskajiさんによるOSC52版pbcopyに投げて同等のことを実現するelispを自分で書いていて、その公開のための記事になる予定だった。結局のところ執筆中にググっていたらうっかり上記のosc52e.elを見つけてしまい、これのほうがemacs単体で完結するしいいやん!!!!!慣れないelispと格闘して潰した1日半はなんだったんだ!!!!!!という気持ちでこの記事は執筆された。供養させてください!!!!🙏🙏🙏https://gist.github.com/mecab/2ea01bf0059c40795fae2becb681d059予告ところで、この方法でも問題があって、SSH先でもtmuxを立ち上げていると利用できない。↓[端末エミュレータ]という構成になるので、手元まで制御文字列が届かないためである。それに対する真に驚くべき解決策を友人とともに見つけたが、この記事はそれを書くには狭すぎる。これについてはまた後日。terminalZshとiTerm2の環境下で、プロンプトにemojiを用いた場合にコマンド補完後に最初の1文字が重複して表示される問題を解決した。readZshでプロンプトのホスト名をホスト名によって異なり、かつ読みやすい色にした。最近、STEERSというサービスを知った。このサービスは、オリジナルTシャツの販売サイトだ。自分でデザインしたTシャツを販売している業者は無数にあるが、STEERSの特筆すべき点は、デザインをアップロードして購入を募るところまで無料であるところだ。その後、3名以上から注文があった場合に注文が確定され、注文者に請求された後に発送されるらしい。このため、デザインをアップロードした人は(自分で注文しない限り)無料でTシャツを販売することができる。価格については、Tシャツの原価のままで販売することもできるし、自分の利益を上乗せした上で販売する事もできる。前々からネタTシャツを作ってみたかったものの、1枚だけつくると割高だし、かといって複数枚作っても友人らに売れるかどうか不安でなかなか勇気が出なかった。STEERSではデザインだけ上げて、他の人に需要があるかを伺えるので嬉しい。デザインの過程もブラウザ上だけで簡潔し、UXも良い。いうことで、さっそく1つ作ってみた。2016の20日目だ。emojiに関する詳細情報(コードポイント、名前[1]、キーワード、GitHubのショートコードなど)を表示するコマンド、emspectをリリースした。GitHubで開発を進めている。