`(blog ,garaemon)

ポップカルチャーを摂取して、コードを吐き出す機械

Programming

catkin profileが便利

catkin tools (catkinコマンド)を用いてソースコードをビルドする時に、ビルドオプションを変更したいことがあります。 たとえば、RelaseビルドとDebugビルドを切り替えたいときです。 このようなビルドオプションの切り替えには、catkin profileの機能が便…

find-name-diredから.gitディレクトリを除く

find-name-diredは, あるディレクトリ以下のファイルの文字列を一括で変換したりする際に、便利な関数です。 qiita.com www.gnu.org しかし, .gitディレクトリが候補に含まれてしまうと, 何かと不便なことが多いです。 以下のようにfind-name-argを変更する…

catkin toolsでcompile_commands.jsonを生成する

ROSのパッケージをビルドするときにcatkin tools (catkin_makeではなくてcatkinコマンド)を利用してcompile_commands.jsonを生成するために、シェル関数を~/.bashrcとか~/.zshrcに定義しておくと便利。 開発時は定期的に気が向いたら実行する。 compile_comm…

display-fill-column-indicator-modeを試す

display-fill-column-indicator-modeの使い方 display-fill-column-indicator-modeという, モードがemacs27から実装されている. これは, 指定した行に目印を表示して、横に長過ぎるコード・文章を書かないようにするminor modeだ. display-fill-column-indic…

vscodeのtabの挙動をemacsっぽくする

customize-indentation-rules visual studio codeのtabの挙動をemacsのようにしたい. そのために, 以下の2つのextensionを利用する. * vscode-emacs-indent * customize-indentation-rules emacsにおけるtabを押したときの挙動は以下のようなものだ. tabを押…

emacs-slackでShift+Enter, Ctrl+Enterをメッセージ内改行にする

emacs-slack内ではEnterでメッセージ送信がされるので、メッセージ内で改行するときにwebのインターフェイスなどと同様にShift+Enter, Ctrl+Enterでメッセージ内改行するようにしたい. ;; use Shift+Enter and Ctrl+Enter as newline (define-key slack-mode…

keyboard macroの最中はhelmを使わない

個人的にC-sでの検索に通常のisearch-forwardではなく, helm-swoopを利用している. しかしこうすると, keyboard macroを入力している間にhelmが走り、これがどうやら後ほどkeyboard macroを再生するときに問題があるようだ. keyboard macroを記録中かどうか…

emacs 26で入ったdisplay-line-numbersを利用する

emacsで左側に行数を表示するlinum-modeは重いことで有名だった。 軽くするためにはいろいろと設定しなくてはいけなかった. しかし, emacs26でついに行数表示のネイティブ実装であるdiplay-line-numbers-modeが実装された. (if (version<= "26.0.50" emacs-v…

web-modeでeslintをflycheck経由で使う

flycheck-add-modeで設定する (flycheck-add-mode 'javascript-eslint 'web-mode) eslintの設定で, eslint-plugin-htmlが必要なので、その設定を忘れないようにする. module.exports = { ... "plugins": [ "html", ], ... }

helmを立ち上げたときにhelm-source-ls-gitを強制的に更新させる

helm-ls-gitはgitで管理されているファイルをhelmの候補に加えてくれるとても便利なパッケージ. これをhelm-miniなどを立ち上げたときにも使うようにしたいのだが、helm-source-ls-gitをhelm-mini-default-sourcesに加えるだけでは不十分だった。自分でhelm-…

el-getで導入したパッケージをまとめて更新する

el-get はパッケージ管理のためのelisp. 一度インストールした後に更新したいときは M-x el-get-update-allを実行するとよい.

helm-ls-gitでmagitをバックエンドに利用する

helm-ls-gitを使うと, helmの一覧にgitで管理されてるファイル一覧が列挙されて便利. しかしデフォルトでvc-dirが利用されているためかうまく動かなかった. これをmagitを使うように設定したら意図通り動くにようなった. (require 'helm-ls-git) (setq helm-…

slackのchannnel idを名前に変換する

slackのメッセージにはchannelのidが入っているが、名前にはなっていない. 名前に変換するにはchannels.infoを使う必要がありそう. 以下はtypescriptを利用したサンプル. ライブラリには slack-node-sdkを利用 import { WebClient, WebAPICallResult, RTMCli…

emacsでカーソルの行番号を取得する

line-number-at-posを使えば良い (line-number-at-pos (point))

pythonでjsonのutf8の文字をescapeしない

pythonでdictオブジェクトを文字列に変換すると、utf8の文字がエスケープされてしまう. 'hoge: %s' % json.dumps({'text': 'ほげ'}) => 'hoge: {"text": "\\u307b\\u3052"}' これをエスケープしないようにするにはensure_ascii=Falseにすれば良い. 'hoge: %s…

micropythonのusocketで大きなファイルをHTTP越しに読む

micropythonを動かす環境はm5stackといったメモリが貧弱であることが多く, 普段は気にならないサイズでもMemory Allocation Errorが発生して読み込めないことがある. micropythonのurequestsパッケージは便利だけど、データを逐次的に読み出すインタフェイス…

javascript版jupyterのようなobservable

beta.observablehq.com observableはjavascript版のjupyterのようなサービス. d3.jsを利用した美しい可視化が特徴的. どうやら今年の1月31日にサービスインしたらしい. Hello, world! Announcing Observable notebooks: a better way to code, discover, an…

emacsでカーソル位置の単語をispellの辞書に追加する

emacsでカーソル位置の単語をispellの辞書に追加するelispコード (require 'thingatpt) (defun add-word-to-ispell-dictionary () "Add word to dictionary file for ispell." (interactive) (let ((user-dictionary-file (expand-file-name "~/.aspell.en.p…

emacsでカーソル位置の数字を上下させる

emacsでカーソル位置の数字を上下させるemacs lispコード. どこかから拾ってきたのかもしれないもの. 意外と便利. (defun increment-number-at-point () "Increase number at current cursor." (interactive) (skip-chars-backward "0123456789") (or (looki…

micropythonでm5stackをwifiにつなげる

m5stackでmicropythonを使ってwifiを利用するときは, wifisetupを利用すれば簡単に実装できる. import wifisetup ただ、再接続などを実現するためにどうしても自前で実装したかったので試してみた. from m5stack import lcd import utime import network def…

helm-miniのデフォルト値にカーソルのシンボルが渡ってしまう

helm-miniをC-x bに割り振ってバッファ選択に使っているのだが、現在のカーソルがある位置のシンボル(いわゆるthing-at-point)がデフォルトで渡ってしまい、バッファの選択に不自由していた. どうやら, helm関数の:defaultキーワードを与えないと、thing-at-…

emacsでmarkdown-modeのinline code blockに色を付ける

code blockのフォントを変えないようにしたのは良いけど 、色も変わらなくなってしまった。 これはみにくいので色を設定するようにする. (set-face-attribute 'markdown-code-face nil :inherit 'default) (set-face-attribute 'markdown-inline-code-face n…

micropythonのPOSTでハマった件

m5stackでmicropythonを動かして、spotifyで再生中の曲を表示するものを作っている. m5stackで再生中のSpotifyの曲の画像が出るようなのを作ってみた pic.twitter.com/59qnbYn47M— がらえもん (@garaemon) 2018年4月14日 その過程で、micropythonに入ってい…

emacsで選択範囲or現在行のpythonを評価する

elpyを使っています. elpyやemacs付属のpython-modeでも, pythonのインタプリタをemacs上で起動することができ、大変便利だ. elpyの場合はM-x elpy-shell-switch-to-shell, python-modeならM-x run-pythonでpythonインタプリタを立ち上げることができる. ema…

emacsのmarkdown-modeのcode blockでフォントを変えない

emacsのmarkdown-modeはcode blockでフォントが変わるのが嫌だったのでこれを変更しないように設定。 emacを使うような人は、デフォルトで等幅フォントを指定してるんじゃないのかな? ;; Do not change font in code block (set-face-attribute 'markdown-co…

emacsのmarkdown-modeでcode blockをsyntax higlightする

emacsでmarkdownを書いてる時に、markdown-modeでcode block (triple backquotes) にsyntax higlightを有効にできる. (setq markdown-fontify-code-blocks-natively t) コレはかなり良さそう. before after

emacsで毎日のメモのためのmarkdownを自動的に作成する

メモをとるのにmarkdownはとても便利. emacsで作業中のメモをとるためのmarkdownを日別に自動的に作成するemacs lispのコード. ~/daily-notes/の下に日付の入ったファイル名を自動生成する. また、先頭に日付も自動的に挿入するようにしている. (defvar dail…

emacsのC-sをhelm-swoopで置き換える

最近emacsの検索のキーバインドであるC-sをhelm-swoopに置き換えてみている. helm-swoopに関する説明はこちらが詳しい emacs.rubikitch.com C-sのたびにバッファがかちゃかちゃしてうるさい気もするけど、使いこなせれば作業効率が上がりそうな気がする. 僕…

emacsの文字サイズの変更をよくあるキーバインドにする

emacsで文字サイズを大きくおよび小さくするキーバインドはC-x C-+, C-x C--に割り振ってあるが、最近は(macだと) ⌘-+/-に割り振ってあるものが多い. 以下のように.emacsに書いておくと, macならそのようなキーバインドになる. Linuxだと\Mのかわりに\Cにし…

auto-save-buffers-enhancedを使っているとtramp-modeがハングする

tramp-modeはemacsでssh越しにリモートのファイルを編集することができて大変便利な機能だ. しかし最近でtramp-modeを利用してssh越しにファイルを開こうとするとemacsが固まってしまい困っていた. 長いこと問題を放置してきたけれども, 色々調べてみるとaut…