読者です 読者をやめる 読者になる 読者になる

Get key binding from command

emacs

Sometimes I want to get key bindings of command for implementing like following command. Please see mini-buffer.

f:id:syohex:20160813150435p:plain

(where-is-internal func &optional map ...)

where-is-internal returns list of keys of command(func) from map. For example

(where-is-internal 'next-line global-map)
;; => ([14] [down])

[14] is Control-n and [down] is down arrow key. Type of return value is list of key vector. It should be converted to human readable style.

(key-description key-vector)

key-description returns a pretty description of key-sequence. For example

(key-description [14])
;; => "C-n"

Write function

So we can write the function which returns human readable key sequence from the command

(cl-defun function-to-keybinds (func &optional (map global-map))
  (key-description (car-safe (where-is-internal func map))))

(function-to-keybinds #'next-line)
;; => "C-n"
(function-to-keybinds #'python-shell-send-string python-mode-map)
;; => "C-c C-s"

visible-bellの画像を差し替える

emacs mac

Emacs 25から Macの visible-bellが画像を表示するようになったのでデフォルトの画像から差し替えてみた.

パッチ

Emacs25.1-RC1に対するパッチです.

diff --git a/src/nsterm.m b/src/nsterm.m
index e6a10b8..9a54886 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -1318,7 +1318,7 @@ ns_clip_to_row (struct window *w, struct glyph_row *row,
       NSRectFill(NSMakeRect(0, 0, 32, 32));
       [self.image unlockFocus];
 #else
-      self.image = [NSImage imageNamed:NSImageNameCaution];
+      self.image = [NSImage imageNamed:@"visible-bell.png"];
       [self.image setSize:NSMakeSize(self.image.size.width * 5,
                                      self.image.size.height * 5)];
 #endif

ビルド & インストール

% ./configure --with-ns --without-x
% make
% make install
% cp -r nextstep/Emacs.app /Applications

画像を置く

適当な画像を Resources以下に置く. Objective-Cやら Macのことがよくわかっていないのですが, ドット絵的なものでないとうまく表示されない印象. 普通のアニメの絵とかだとだいぶ潰れてしまう. また画像は小さめのものがいいです. 64x64とか(このあたりは Macに詳しければなんとかなるのかもしれないですが...)

% cp foobar.png /Applications/Emacs.app/Contents/Resources/visible-bell.png

設定

visible-bellを有効にする

(setq visible-bell t)

結果

Ctrl-gなどを押すたびに好きな画像が見れます.

f:id:syohex:20160731085413g:plain

DeNAに入社しました

7月 1日から DeNAで働くことになりました. オフィスは渋谷オフィスです.

きっかけは私がストレス溜まりまくっていた時期に Twitterの名前欄に「求職中」と書いていた(非常識な行為で, 前の会社には申し訳なく思います)ときにお声がけをいただいたことです. 働いてみたいと思った理由は尊敬するエンジニアも多く, 多くの刺激を受けられ, 今の自分にとって非常に良い環境だと思ったからです. (もちろん環境はあくまで環境なので伸びるかどうかは自分次第だと思っていますが)

その他の理由としては

  1. お金がある会社での働き方を知りたかった
  2. マネージメントの行われ方を知りたかった

前の会社ではお金がないということで従業員一同様々なことで苦労しました. 一人あたりの仕事の量であったり, 携わる仕事の内容であったり. 結局お金がないとそこまでやりたくない仕事も(少ないお金で)やらないといけないし, 新しいこともできない, やりたいこともできなかったので, お金があることでどういう風な仕事をできる, どういう風に新しいことにチャレンジできるというのが知りたかったということがあります. (仕事的なこととしては今までの仕事とやっていることも随分違うので, 働きながら見つけていければと思っています)

また前職ではマネージメントらしきものはほとんどありませんでした. 基本的には個人個人に仕事があり, その裁量はすべて担当者に任されるという具合でした. これはこれで人によってはメリットだと思うのですが, 私は悪い方がでかかったんじゃないかなと思いました. そこで本を何冊か買ってこうしたらいいんじゃないかというのを自分なりにいくつか考えてみたんですが, それが良いという確証もなかったので上に相談することもなく自分の中でとどめていました. なんで, ちゃんとマネージメントがちゃんと行われている会社での働き方, それが個々の仕事にどのような影響を与えるかということを知りたかった. 私は(一応)技術のスペシャリストを目指していますが, もしマネージメント方面で面白みを感じる(そもそもほとんど知らないので)ことができればそちらに進むのもいいのではないかと考えています.

ついでに東京に出れた理由(院卒から昨年まで実家を離れられなかった)としては

  1. 両親の主要な借金・ローンを返済した(といっても 400万強でそこまでの額ではなかったですが)
  2. 奨学金をすべて返済した
  3. 祖母, ペットの介護が終了した

年齢的にも完全な自由が効く最後かなと思ったので, 特に働く地域の制限を設けず転職活動を行い DeNAに決めました. 昨日仕事の話を少し聞いてなかなか大変そうだと感じていますが, しっかりやっていければと思います. また今まで学んだ自分の知識(Web系とは異なる知識)というのもうまく活かせていければと思います.

今後とも, よろしくお願いします.

退職しました

本日付で 8年と 3ヶ月勤務した組込み系の会社を退職しました.

退職理由

  1. しんどかった
  2. 今のままではこの先やっていけないと思った

一番大きな理由はしんどくて自分のための自由な時間が確保しづらかったこと. 経営的な問題から少人数で多くの仕事をやらざるを得ない状況になってしまって, ほとんどの人は 2つ以上の仕事を掛け持ちだったんですがそれが辛かった. ひどい時は午前中と昼は Aの仕事して, そこから夕方まで Bの仕事して, そこから終電まで Cの仕事してとかそんな感じで数カ月間働いていました. そうなると体力的な面もそうなんですけど, 勉強もできなくなってしまい(土日など時間があるといえばあるけど限界まで働くと休日でもやる気が出ない), 精神面でもどんどん疲弊するようになってしまいました. 仕事自体は楽しかったし, やりがいもありましたけど, そちらよりも辛いという方が大きくなってしまいました. あと自分の仕事と直接関係ない部分でストレスを感じることも多かったのも辛かったです.

2つめは, 1つめの理由も少し絡むのだけど, 自分の時間が取れないためかどんどん焦るようになってきた. 私は今年で 33ですが, 同年代を見てみるとすごい技術力を持った人が多い. しかも単にある技術に優れてるというわけではなくて, 新しい技術もどんどん吸収している. 技術力でも圧倒的な劣等感を感じる上に, 意識の部分でもすごい劣等感を感じる. ある同年代の人と話たときその考えに驚いた. 自分のキャリアとかちゃんと考えていてすごいと思った. 私はこの年齢なのにそんなことを考えたことは一回もなかった. こんな感じで同年代でもすごい圧倒されるのに, 年下でもどんどんすごい人が出てくるし, 世の中の技術はどんどん高度になっていくし, そんな社会でとてもじゃないけど自分が生きていける気がしなかった. 生きれてもせいぜい 1-2年じゃないかなって思って今のままではいけないなと思い転職を考え始めました. それが一年少し前ぐらい.

と思いはしたけどなかなか転職できませんでした. いろんな人と話をしたり, 求人情報を見たりしていたのですが, 正直通用する気がしなかった. この歳だとそれなりのものを求められるから, とてもじゃないけどそこに自分が到達していると思えなかった. だから 1月ぐらいで転職活動を諦めて仕事を続けていました. その半年後ぐらいにまた少し転職活動をしてみたんですが, 前回と同様諦めてしまいました. でその半年後ぐらいにさすがにもう耐えられないということになって, 落ちまくってもいいからとにかくちゃんと受けてみようって, なって何社か受けたところ, 志望していたうちの一つである東京の Web系企業に受けったので, 転職をすることに決めました.

明日から

明日から渋谷の某 Web企業で働くことになります. 現状力不足としか言いようがないですが, 早く力になり自分から何かを動かせるようになっていければと思います. 素晴らしい人材が多い(尊敬しているエンジニアも多く在籍)会社だし, 素晴らしい環境だと思うのですが, 自分が頑張らないことには意味がないと思うのでちゃんといければと思います.

初めての一人暮らし

どうでもいいですが, この年で初めての一人暮らしです. 特に問題なく生活出来ています. 20年近く前某全寮制学校に体験入学したときはあまりの寂しさに予定を早めて帰ってしまったのですが, 年を取ったのか, ケータイなり SNSでいつでも誰かと繋がっていられるようになったためかわからないですが, ちゃんと生きていけそうです. (あと 1週間ほどしないと家でネットが使えないのが辛いですが...)

最後に

これからも, よろしくお願いします.

Show current timer task in header line

emacs org
(require 'org)
(require 'org-timer)
(require 'cl-lib)

(defvar my/org-timer-current-task nil)

(defun my/org-timer-start-hook ()
  (setq my/org-timer-current-task (nth 4 (org-heading-components)))
  (cl-loop for buf in (buffer-list)
           unless (string-match-p "\\`[[:space:]*]" (buffer-name buf))
           do
           (with-current-buffer buf
             (setq-local header-line-format '((" " my/org-timer-current-task " ")))))
  (setq-default header-line-format '((" " my/org-timer-current-task " "))))

(defun my/org-timer-end-hook ()
  (cl-loop for buf in (buffer-list)
           do
           (setq header-line-format nil))
  (setq-default header-line-format nil))

(dolist (hook '(org-timer-set-hook))
  (add-hook hook #'my/org-timer-start-hook))

(dolist (hook '(org-timer-done-hook org-timer-cancel-hook))
  (add-hook hook #'my/org-timer-end-hook))

Demo

f:id:syohex:20160616201011g:plain

表示されなくなった通知エリアの Dropboxのアイコンを表示させる

xubuntu

f:id:syohex:20160615191724p:plain

だいぶ前からだけど, Dropboxのアイコンが表示されなくなっていた(左から二つめのアイコン). ずっと意味不明なアイコンが表示されているなぁと思っていたけど, 何のアイコンかわからなかったので放置していました. で, 今日 Dropboxということに気づいてそれなら出しておいた方がいいかということで対策を調査しました.

修正方法

原因はよくわかっていませんが, 環境変数 DBUS_SESSION_BUS_ADDRESSを空文字列すると解決するとのことです. 起動スクリプトなり, /usr/bin/dropboxを直に書き換えるなりして, 環境変数を変更するようにし, Dropboxを再起動すると無事アイコンが表示されました(再起動に伴い位置が左端になってしまいましたが...)

f:id:syohex:20160615191937p:plain

quickrun supports gnuplot

emacs

github.com

f:id:syohex:20160612215926g:plain

quickrun.el supports Gnuplot file. You can see output of plot as image in other buffer.

NOTE: This mode is supported only for GUI Emacs.

Please report me if you have any problems or suggestions.