のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:126,805,113人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレEmacs Part 54

    emacs覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    1 2 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    1 = :

    GNU Emacs - GNU Project - Free Software Foundation (FSF)
    http://www.gnu.org/software/emacs/

    EmacsWiki: サイトマップ
    http://www.emacswiki.org/emacs/

    前スレ
    Emacs Part 51
    http://mevius.2ch.net/test/read.cgi/unix/1514601894/
    Emacs Part 50
    http://mevius.2ch.net/test/read.cgi/unix/1482097785/
    Emacs Part 52
    http://mevius.5ch.net/test/read.cgi/unix/1585125902/
    Emacs Part 53
    http://mevius.5ch.net/test/read.cgi/unix/1621758062/

    2 = :

    emacsは19.34が思い出深い

    3 = :

    最近はemacsは極めて安定しているなぁ

    4 = :

    バージョンはいくつ?を使っている人

    5 = :

    eggが使えるかぎりどんどんバージョンアップしてもらってかまわない

    6 = :

    28以降はルッキズムなのにダサいクソエディタ

    7 = :

    ぐーぐる蔓延りフリーソフトが滅ぶ

    8 = :

    IDEが便利で強力になっても
    システム標準でviが必修でも
    VSCodeが流行しても
    Emacsは常に生き残ってきたじゃないか

    9 = :

    脱ヲタ失敗エディタ

    10 = :

    emacsを長らく使ってます(テキスト書き、プログラミングなどメイン使いのエディタ)。

    何か新しいもの触ってみたくて spacemacs と doomemacsを知ったのですが、どっちがおすすめですか?
    (どっちがメンテされてる、など)

    11 = :

    バカみたいな質問はやめてください!

    12 = :

    >>10
    どちらもクレカの番号を抜けないのでおすすめできません。

    14 = :

    WSL の emacs(GNU Emacs 25.2.2 (x86_64-pc-linux-gnu) of 2017-09-23, modified by Debian)に
    markdown-mode 入れようとしてるんだが、packagelist 上では

    markdown-mode 20221105.236 incompat melpa Major mode for Markdown-formatted text

    と表示されてインストールできない。
    何か互換性の問題ってあったっけ?

    17 = :

    いまだに Windows XP 使い続けてる老人と一緒でしょ

    18 = :

    次のように引数の必要な関数を関数名のシンボルの代わりに指定するときに、
    lambda式で書くとエラーになる場合はどうするのがいいんでしょうか?

    Wrong type argument: symbolp, #'(lambda nil (dabbrev-expand nil))

    (setq smart-tab-completion-functions-alist
    '((emacs-lisp-mode . lisp-complete-symbol)
    (lisp-interaction-mode . lisp-complete-symbol)
    (text-mode . #'(lambda () (dabbrev-expand nil)))))

    # この例では実際にはこの設定は不要なんですが、
    # いじっているうちに疑問が出てきたので一例として。

    19 = :

    うーん多分それ先頭の#'全く場違いなんじゃね?
    それシンボルのfunctionPartにアクセスするfunctionというかaliasというかsyntax sugarというべきかのものだしquoteされてたらそもそもなんも意味をなさん
    quote内部のpartial evalみたいのは先頭をbackquoteにして`(sym1 sym2 ,evaled)みたいに先頭にcommaを付記する
    defmacroとかのときによく使う手法だな。まぁ、俺はlispyじゃないと思うからあんま好きじゃないけど

    (list (cons 'someone 'something) (cons 'anyone (lambda (x) (some-over x))))みたいに書くか
    `((someone . something) (anyone . ,(lambda (x) (some-over x))とかじゃね(´・ω・`)

    20 = :

    まだよく理解できていないので一部だけ補足しますが、
    #'(lammda ...は(lambda ...でも一緒なのかと思ったんですが。

    http://www.gnu.org/software/emacs/manual/html_node/elisp/Anonymous-Functions.html

    で、そもそもこんな風に書いたのは次のような書法を参考にしたんですが、
    どうもここではまずいようです。

    (add-hook 'text-mode-hook
    (lambda ... ))

    21 = :

    いまいち何が解決出来ないのか何が分からんのかが分からんな

    ただhookにlambdaぶち込みたいならfbody 先頭に
    (lambda () (interactive) (insert "hello hook fucker"))みたいにinteractive宣言が要るぞ
    lambdaのargumentが必要な場合はこのinteractiveのargumentに別途それらにアサインする関数というか糞stringというかlist返すexpression書くんだけどこまけえ事は説明めんどい(´・ω・`)

    22 = :

    (quote symbol)は評価されないとsymbolにならないように、(function (lambda () ...) も評価されないと関数にならない。
    >>20
    評価される文脈なら一緒だけどリストの中にある場合はそうも行かない。
    lambdaはそのままで関数として機能する(funcallできる)からややこしいのかな。
    symbolは評価すると変数の値になってしまうけどlambdaは、まあ、closureになったりはするものの関数のままだしクォートの必要性を感じづらいというか。

    23 = :

    >>19
    >>22
    何となく引っかかっていたところがちょっとわかりかけました。
    lambda式が評価せずそのまま飲み込んで関数として定義されていないことが、
    関数名のシンボルを要求する文脈ではエラーになると。

    ではつまり関数として定義してしまうしかないということですかね?

    24 = :

    バッククォートを使えルーク

    25 = :

    >>23
    文脈と書いたのは>>18の#'(の部分が評価されない文脈だから。なぜなら'(で囲まれてる中だからね。
    #'(lambda () ...)は(function (lambda () ...)の略記だから(ここが分かってない?) '(の中ではそのまま一つ目の要素がシンボルfunctionで二つ目の要素が(lambda~のリストになってしまう。そしてそれはfuncall出来ない。例:(funcall '(function (lambda () 123)))

    解決策は'(を使わずリストを組み立てることで、>>19>>24が言うように(listやバッククォートでリストを組み立てること。シンボルだけで無く、(functionで囲まれていない)lambda(やそれを評価すると出来るclosure)も問題なく使える。
    まあdefunして良いならそれでもOK。

    26 = :

    >>25
    中途半端にあれこれ聞いてお手間を取らせました。
    まだろくにわかってないんですが、
    疑問は疑問としてとりあえずこうすると動きます。
    consだといいの?何だか不思議だなあ。

    (setq smart-tab-completion-functions-alist
    '((emacs-lisp-mode . lisp-complete-symbol)
    (lisp-interaction-mode . lisp-complete-symbol)
    (cons 'text-mode (lambda () (dabbrev-expand nil)))))

    27 = :

    動いてはいない予感

    29 = :

    多分、こういうことだろうと思うんですが、

    (setq smart-tab-completion-functions-alist
    `((emacs-lisp-mode . lisp-complete-symbol)
    (lisp-interaction-mode . lisp-complete-symbol)
    (text-mode . ,(lambda () (dabbrev-expand nil)))
    ))

    今回の場合は条件がfboundpでチェックされるので同じエラーになりますが、

    cond: Wrong type argument: symbolp, (lambda nil (dabbrev-expand nil))

    これがなければfuncall以下はちゃんと動きます。

    (cond
    ((fboundp smart-tab-mode-specific-completion-function)
    (funcall smart-tab-mode-specific-completion-function))

    30 = :

    むしろその場合はこうするだけでいいんですね。

    (setq smart-tab-completion-functions-alist
    '((emacs-lisp-mode . lisp-complete-symbol)
    (lisp-interaction-mode . lisp-complete-symbol)
    (text-mode . (lambda () (dabbrev-expand nil)))))

    >>19
    > うーん多分それ先頭の#'全く場違いなんじゃね?

    そもそも最初に指摘されていたこの点がまずかったと。

    32 = :

    何かの拍子で特定のバッファ(やてふモード)を閉じれなくなりました
    * Message *を確認すると以下のメッセージが出ます
    bm-buffer-save: Wrong type argument: listp, \.\.\.
    他のやてふモードのバッファは問題ありません
    とりあえず当該バッファを閉じたいと思い
    *scratch*で
    (remove-hook 'after-save-hook 'bm-buffer-save)
    したのですが何ともなりません
    何か解決方法はないでしょうか?

    33 = :

    どこでどう評価するかでは
    clのlambdaは評価するとレキシカルクロージャに化けるマクロだけど、(coerce '(lambda ...) 'function)でキャストすればcoerceはfunctionのように特殊形式でないからローカル関数を補足できないはず
    el的にはどうだっけ?
    そもそもクォートされたラムダ式を単にフォームとして受け取り、自分で勝手に解釈するだって全然アリ

    34 = :

    >>32
    kill-buffer-hook とかじゃなくていいの?

    36 = :

    ただ今度は当該ファイルをfind-fileすると
    初回に以下のエラーメッセージが出ます
    bm-buffer-restore: Wrong type argument: number-or-marker-p, nil
    連続で2回当該ファイルをfind-fileすると開くので問題はないのですが
    これはbmのキャッシュが不整合を起こしているということでしょうかね?

    37 = :

    前スレでDebianのunstableでEmacsパッケージのnative compilationが有効化されたって話があったけど
    その後色々問題があったものの解決されて有効化されたバージョンがTestingにやってきた模様
    というわけでこのまま行けば来年出るであろうDebianの次の安定版ではEmacsパッケージは
    デフォルトでnative compilationが有効化されたものになるわけだ

    38 = :

    キャッシュのsaveにprincを使っていて print-lengthより長いリストが...になっているかもしれない
    (let ((aaa (list '(a) '(a) '(a))) (print-length 2)) (princ aaa)) ; => ((a) (a) ...)

    39 = :

    native compilationを有効にすると、
    確かにごく偶に何も言わずに落ちることがあるから、
    まったく問題がないわけでもないのかな。
    まあ、最後に落ちたのも一月以上前だったりするけど。

    40 = :

    companyと*Completions*バッファについて教えてください。
    (use-package company)としてcompanyを使うようにすると、補完がcompany経由で行われる?と聞いたのですが、
    例えば、
    M-x shell
    ls ./[TAB]
    とすると、*Completions*バッファ内にカレントディレクトリのファイルが表示されます。
    これはcompanyモードが効いてないのでしょうか?それともcompanyが補完するのは、こういう類の補完ではそもそもないのでしょうか?

    41 = :

    バッファでcompany-modeが有効になってないかキーバインドが定義されてないとか。
    M-x company-completeするとどうなりますか?

    42 = :

    >>41
    返信ありがとうございます。
    shellのバッファで「M-x company-complete」するとカーソル位置で補完候補が現れました。
    同じバッファでM-x describe-modeをすると、一覧にCompanyとGlobal-Companyが出てきています。
    これは、単にキーバインドが定義されてないってことでしょうか?

    43 = :

    M-x describe-key
    で[TAB]押すとどうなんだろうか

    44 = :

    (global-company-mode 1) とかやっとけばいいんでないの?

    45 = :

    >>42
    use-packageを使ってませんが、
    とりあえずglobal-company-modeは有効にされてるんだと思います。
    M-x company-completeで手動では起動できるわけだから、
    どのキーにバインドするかは設定が必要だろうし、
    tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。

    46 = :

    返信ありがとうございます。

    >>43
    ls ./[ここでdescribe-key TAB]すると、(completion-at-point)にバウンドされてるようです。

    >>44 >>45
    describe-modeした際にglobal-companyが出てきてるので、global-company-modeは有効になっているように見えます。

    >どのキーにバインドするかは設定が必要だろうし、
    >tabでデフォルトのshellの補完を奪っていいかどうかも自分次第かと。
    なるほど。tabに対してキーバインドは設定していませんでした。
    このあたりの仕組みがよくわかってないもので、company-modeを有効にすると自動的に*Completions*バッファが
    ツールチップで補完表示されるものかと思ってましたが、そういうものではなく、
    自分で設定する必要があるんですね。

    47 = :

    >>46
    普段company-idle-delayをnilに設定してキーで起動していたので勘違いしましたが、
    デフォルトのままだと入力するそばから自動的に補完候補を表示しますね。
    私はそれが煩わしいので手動で起動するようにしてたんですが、
    何かの設定がうまくいってないんですかね?

    48 = :

    >>47
    頂いた情報を参考に色々調整した結果、
    (setq company-idle-delay 0)
    (setq company-minimum-prefix-length 0)
    上記設定を追加してみると、shellバッファで文字を打つたびに補完候補が表示されるようになりました。

    試しに、
    (setq company-minimum-prefix-length 5)
    とした場合、
    (5文字未満) ls ./[TAB] # *Completions*バッファが表示される。
    (5文字以上) ls ./../[TAB] # companyで補完候補が表示される。
    という挙動になりました。

    私がcompanyの機能を勘違いしている気がしてきました。
    companyはemacs従来の「*Completions*バッファが表示される」動きをまるまる置き換えるものと思ってましたが、
    そんなことはなく*Completions*バッファが表示されてしまう場面を完全に無くせるわけではないのでしょうか?

    49 = :

    companyは既存の設定だけでなく、
    最終的には自分で補完に使用するbackendsまで作成すればほとんどどんな動作にもできるはずですが、
    お話のようにデフォルトの補完completion-at-pointをcompanyで置き換えたいだけなら、
    パッケージに同梱されたcompany-capfをcompany-backendsに設定すればよさそうですけどね。

    50 = :

    company-backendsは以下のように設定されていました。

    (company-bbdb company-semantic company-capf company-files
    (company-dabbrev-code company-gtags company-etags company-keywords)
    company-oddmuse company-dabbrev)

    リストの中にリストが含まれてるのが怪しいのですが、一応company-capfは入っているようです。
    一つ気になったのが、
    (use-package company
    :config
    ((global-set-key (kbd "TAB") 'company-complete))
    と設定しても、shellバッファでdescribe-key [TAB]をすると、設定されているのは
    (completion-at-point)
    となっていました。これはキーバインドの設定の方が間違っている可能性がありますか?


    1 2 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について