お元気そうで残念です

仕事とか趣味のメモを残します

npmをapt-getしようとしたときのエラー対処

npmを入れようとしたら Unable to correct problems, you have held broken packages. とか怒られたので対処方法を調べた。

% sudo apt-get install npm
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
       Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
       Depends: node-ansi but it is not going to be installed
       Depends: node-archy but it is not going to be installed
       Depends: node-block-stream but it is not going to be installed
       Depends: node-fstream (>= 0.1.22) but it is not going to be installed
       Depends: node-fstream-ignore but it is not going to be installed
       Depends: node-github-url-from-git but it is not going to be installed
       Depends: node-glob (>= 3.1.21) but it is not going to be installed
       Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
       Depends: node-inherits but it is not going to be installed
       Depends: node-ini (>= 1.1.0) but it is not going to be installed
       Depends: node-lockfile but it is not going to be installed
       Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
       Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
       Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
       Depends: node-gyp (>= 0.10.9) but it is not going to be installed
       Depends: node-nopt (>= 2.1.1) but it is not going to be installed
       Depends: node-npmlog but it is not going to be installed
       Depends: node-once but it is not going to be installed
       Depends: node-osenv but it is not going to be installed
       Depends: node-read but it is not going to be installed
       Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
       Depends: node-request (>= 2.25.0) but it is not going to be installed
       Depends: node-retry but it is not going to be installed
       Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
       Depends: node-semver (>= 2.1.0) but it is not going to be installed
       Depends: node-sha but it is not going to be installed
       Depends: node-slide but it is not going to be installed
       Depends: node-tar (>= 0.1.18) but it is not going to be installed
       Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

どうも先にppaリポジトリを追加してnodejsをインストールしていたために、 依存関係でエラーが出た様子。

sudo apt-get --purge remove nodejs
sudo add-apt-repository --remove ppa:chris-lea/node.js
sudo apt-get install npm

これで無事インストールできた。

use-packageを導入してみた

Emacs - use-packageで可読性の高いinit.elを書く - Qiita

上のサイトを参考にemacsにuse-package.elを導入してみた

 

require を use-package に書き換えるのはそのままなので問題なし

define-keyの書き換え方がいまいちわからない

:bind で ("キー設定" . 動作) はいいんだけど

キーマップの指定方法がよくわからない

 

よくわからないからuse-package.elに内蔵されてるbind-key.elで確認

 

「bind-key.el」タグの記事一覧 | るびきち「日刊Emacs」

 

(global-set-key (kbd "C-c x") 'my-ctrl-c-x-command)

(bind-key "C-c x" 'my-ctrl-c-x-command)

(define-key some-other-mode-map (kbd "C-c x") 'my-ctrl-c-x-command)

(bind-key "C-c x" 'my-ctrl-c-x-command some-other-mode-map)

なるほど 3つ目の引数でキーマップを指定すると

つまり

bind-key.el では

bind-key "キー設定" 動作 キーマップ

となる

 

ここで use-package.el の :bind に戻ってくると

:bind ( ("キー設定" . 動作 . キーマップ) )

ということになるように思える

試してみたけどどうも違うらしい

 

emacs use-package.el : Emacsの世界的権威が行っている最先端ラクラクinit.el整理術 | MELPA Emacs Lisp Elisp パッケージ インストール 設定 使い方 | るびきち「日刊Emacs」

 

他のサイトもぼちぼち見てみたけど

use-pakcage.el の解説では :bind 使用時にキーマップの指定をしているのが見つけられない

ということでキーマップが global-map 以外の場合は bind-key.el でいこう

 


まとめ

use-package.elを導入した

require

use-package 

define-key

キーマップが global-map の場合は
:bind ("キー設定". 動作)

キーマップがそれ以外の場合は use-package.el に内蔵されている key-bind.el を使う
(bind-key "キー設定" '動作 キーマップ) 

その他のオプションはそのうち追記予定