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

    【叩かれて】Emacs Lisp道場【強くなれ】

    emacs覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    1 = :

    なんとなくEmacs 触り始めて、なんとなくelispにも手を出して
    しまったアナタ。

    なんとなく書いてしまったコードをココに書き込んで叩かれましょう。
    タタカレテツヨクナレ。

    年季の入った玄人衆は、もしアドバイスできたらお願いします。
    いや、叩きついでにでも。

    とりあえず入門書は
    http://www.netfort.gr.jp/~kiyoka/emacs_setq/emacs_setq.html
    http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp.html

    リファレンスマニュアルは(ちと古い)
    http://www.fan.gr.jp/~ring/doc/elisp-manual/elisp.html

    とか、新しいのは(でも英語)
    http://www.delorie.com/gnu/docs/elisp-manual-21/elisp.html

    ではひとつ、コード中心の熱いバトルをよろぴく。

    3 = :

    自慢の.emacsを貼り付けよう
    http://pc.2ch.net/test/read.cgi/unix/1001393679/

    4 = :

    >>3
    これって倉庫行ってるっぽくないすか?

    5 = :

    >>4
    倉庫入ってるからこそ、
    リンクが貼ってあると有難い。
    しかし良スレになるかな? 自慢スレは後半失速してたからな。

    6 = :

    入門書は
    http://www.gentei.org/~yuuji/elisp/
    がおすすめ

    7 = :

    >>6
    いきなりメジャーモードから作り始めるやつだね。
    おもしろそ。

    8 = :


    ウッス!
    自慢スレの括弧の対を入れるのを参考に just-one-spaceを改造してみました。
    作る前から明白でしたけど、あきれるほどに実用度ゼロでした・・・_| ̄|○

    (defvar my-just-one-space-state nil)
    (defun my-just-one-space ()
    (interactive)
    (if (and (eq last-command 'my-just-one-space) (null my-just-one-space-state))
    (progn
    (backward-delete-char 1)
    (setq my-just-one-space-state t))
    (progn
    (just-one-space)
    (setq my-just-one-space-state nil))))

    (global-set-key "\M- " 'my-just-one-space)

    9 = :

    わたしゃ、「リスト遊び」を推すぞ。

    10 = :

    (setq completion-ignored-extensions
    (cons ".class" completion-ignored-extensions))
    (setq completion-ignored-extensions
    (cons ".exe" completion-ignored-extensions))
    (setq completion-ignored-extensions
    (cons ".obj" completion-ignored-extensions))

    これを1行にまとめたいのですが、どうすればいいですか?

    11 = :

    >>10
    (setq completion-ignored-extensions (cons ".class" completion-ignored-extensions)) (setq completion-ignored-extensions (cons ".exe" completion-ignored-extensions)) (setq completion-ignored-extensions (cons ".obj" completion-ignored-extensions))

    12 = :

    ほしい答えはこれか?
    (setq completion-ignored-extensions (append '(".class" ".exe" ".obj" completion-ignored-extensions)))
    add-to-list も参照のこと。

    13 = :

    括弧位置がおかしくない?

    (setq completion-ignored-extensions (append '(".class" ".exe" ".obj") completion-ignored-extensions))

    14 = :

    >>13
    おぉ。ほんとだ。失敬失敬。

    15 = :

    (setq completion-ignored-extensions (append `(".class" ".exe" ".obj" ,@completion-ignored-extensions)))

    16 = :

    なるほど、こうやるんですね。
    どうもありがとうございました。

    18 = :

    あー append はいらなかった。

    19 = :

    XHTMLだと原則終了タグも書かなきゃならないので、タグ書きがめ
    んどう。そこで、ミニバッファでタグの要素を打ち込んでカーソ
    ル位置にタグを挿入するかんたんなS式

    ;; insert-htmltag
    (defun insert-htmltag (str)
    "Insert a pair of HTML tags.
    Insert a pair of HTML tags read from
    mini buffer at the cursor point."
    (interactive "sInput tag: ")
    (let ((elm (car (split-string str))))
    (if (stringp elm)
    (progn (insert "<"str"></"elm">")
    (forward-char (- (+ 3 (length elm))))))))

    (setq html-helper-mode-hook
    '(lambda ()
    (define-key html-helper-mode-map "\C-ct" 'insert-htmltag)))

    たとえば、ミニバッファで
    div class="hoge" と入力すると
    <div class="hoge"></div> とカレントバッファに挿入され、カー
    ソルもタグのあいだに移動ずみです。

    HTML-helper-mode のキーバインドを覚えきらないんで(^_^;)

    21 = :

    >>19
    yatex付属のyahtmlとか。

    24 = :

    以前自慢スレで、存在するファイルのみを読み込む

    (defadvice find-file (before existing-file activate compile)
    "When interactive, find file existing files only."
    (interactive "fFind file: \np"))

    を書いた者です。
    新規ファイルが作れないのが自分でも不便に思ってきたので、
    簡単ですが新しいのを考えましたです。

    (defun my-find-file (filename &optional wildcards)
    (interactive "FFind file: \np")
    (when (or (file-exists-p filename)
    (y-or-n-p "Not exists. New file? "))
    (find-file filename)))
    (global-set-key "\C-x\C-f" 'my-find-file)

    今度はいかがでしょうか?

    25 = :

    多くの Emacs 使いは何かする度に yes/no を聞かれるのを嫌う気がします。

    26 = :

    >>25
    新規ファイルを開くのに、前置引数で与えるのとy-or-n-pで聞くのを迷ったん
    ですが、y-or-n-p の方が自然かなと思った次第です。

    27 = :

    >>25
    (fset 'yes-or-no-p 'y-or-n-p)

    28 = :

    >>24
    贅沢を言えば、
    (y-or-n-p "Not exists. New file? ")で nと答えた時にアボートせずに
    ファイル名入力へ戻ってホスィ

    29 = :

    >>28
    こんなんではいかが?

    (defun my-find-file (filename &optional wildcards)
    (interactive "FFind file: \np")
    (unless (or (file-exists-p filename) (y-or-n-p "Not exists. New file? "))
    (setq filename nil)
    (command-execute 'my-find-file))
    (find-file filename))

    30 = :

    >>29
    イイカモ。
    でもさらに贅沢を言えば
    (command-execute 'my-find-file)でファイル名入力に戻った時に
    前回の入力がそのまま残っていてくれるとウレシイス

    31 = :

    >>30
    拙者もちょっと気になってましたが、
    何をどうやればよいのやら・・・。
    (interactive "FFind file: \np")のプロンプトの後に文字列を挿入すること自体、
    さっぱりわかりません。


    32 = :

    (defun my-find-file (filename &optional wildcards)
    (interactive "FFind file: \np")
    (unless (or (file-exists-p filename) (string-match "[[*?]" filename)
    (y-or-n-p "Not exists. New file? "))
    (let* ((regexp (concat "^" (regexp-quote default-directory) "\\(.*\\)"))
    (str (progn
    (string-match regexp filename)
    (match-string 1 filename))))
    (catch 'exit
    (while t
    (setq filename
    (read-file-name "Find file: " default-directory nil nil str))
    (when (or (file-exists-p filename) (string-match "[[*?]" filename)
    (y-or-n-p "Not exists. New file? "))
    (throw 'exit t))
    (string-match regexp filename)
    (setq str (match-string 1 filename))))))
    (find-file filename wildcards))

    33 = :

    >>32は神!

    じっくり読ませてもらいます。
    ありがとうございまスタ。

    35 = :

    >>34
    !!! interactiveの引数が関数になってる。
    おお、こんなことができるのですか!
    自前でinteractiveのコード文字を定義すればいいと・・・目から鱗。
    ちょっと感動してます。
    コンパクトになってるし。

    37 = :

    >>34
    > なんか、 point が filename の最初に来ちゃうんだけどね…

    気になりだすと止まらないので、朝から覗いてるんですが、
    read-file-name -> completing-read -> read-from-minibuffer -> read-string
    と見ていっても結局 built-in function で補完途中の動作は触れないんですね。

    src/fileio.c にread-file-nameがあるんですけど、ここいらにパッチするし
    かないんでしょうか・・・ポイント動かすだけなのに・・・

    もうギブっす

    38 = :

    >>37
    × 補完途中
    ○ 入力中
    スンマセ

    43 = :

    ----BEGIN BASE64----(bf-mode.el.gz)
    H4sICDAmeD8AA2JmLW1vZGUuZWwAzRprb9w28vMecP+BEILzqo02tuNcUQftIU7d
    nK+OU8Quer26B3AlalexVlRIyvYGxf32myEpinravvTaLJB4V5wZzpszIz5/To4E
    v5GMfJvljGx4wkjKBUkywZI//+n5c/w3e3SSHJJlGuHyguWPr8ne4guyv7v79Mnu
    l0/2vyR7+4dP9w4PDsiqEIIc35bkUY2sCRd0w3wKeuGUSoU7ZmnGgP5rXpBzVhIg
    h5TJ/t7h091D+PKP84uamMZryJCYb5gkN5lakxdH529Of7g4Pv2JnL0hP754+/bF
    2cVPC41xsc4kkTxVN1QwAt+TTCqRLSvFElIVCRNErRl5dfYDecUKJmhOvq+WeRaT
    0yxmhWQLt/mPa6qQggKSh/oJIUfp3FNiqLlDmE1WcBG1dboAaPOI5jngkC2vLBnF
    ydKQSdEWjMos3xJaJBozVvn2MUmYLDPFCE/JFWNlVqwsWcfgSSEVkLa87S1Aw9eM
    BI3SApIVsBUKbOhyAbtoRgTJOU2ikqq1URzZXxCaJBo45cgw7phnBUNuNUbC1YJt
    aCwtBnzmgr2vgDTZsbuGjrsfJF2xhresuOZXho+ELLfkZXRLkmbr5YwVCoxjyZjn
    T+E5AXW+n7HbTJFU8E0b4GBBCgQoZ1r0uBISfqHIVKyYMtrNEEQb3mk9U3bnZwty
    /v3LmYwFiEyq0gCg5CB+wm+coOeRBwcLxSiknNHkXQX+rgHoMrdGltkH5oDETPHV
    Cp4KBlbgRb5t+f0FT3ijOrdTtgGVamrzdyVbPSarLH1MygK+oe9suGCLReh0pyoB
    ohdPeJqCSQsFJo+vCC1LRgUtYq2ZjhSgFsfENRUZsi+1S1eSCWnW5glLYbE2RSRZ
    Dr4FRCInDSkyiHxCgs++zSmw59tgQ6+M3ERD3qxZYQ0FkatJgZMHYX+fmldvG3XP
    TQYkndxhDZgIu2von1WbJdC9ycD4SzDlGh1A8dLEx6Aad1GcGy6uzFO15pUiluz0
    3ugoZM/ufNR3Itzvu6OtYoNk2G3MSgV/VGODU8iBmEdMsrlVkOcyXgB76yxeE0yU
    Bgsi08WIIS6Zej9EemceXF4u2C17FBD8Btn5URCGnvdkGM4FpFfnRsPOYxQWQSYD
    3wSOB0TSOcMCjoCUgl1nvJLRFdtuaDkCBflBQJppVL2s0hTsaqAd67xUoB5gPa2K
    GL92z0mkWxWN/9NrJ0fMizRbVYJqvHmIBmhrsSXwvGZpCD00Cu3sdgVOaFRSk9eq
    psDpNTMPNIiV7Q7ZDQLk8JoFohzPwzINyTHIqDFbAhGtWMThXBH1FpbvqgCvkGTO
    C0et1CuwNoAmkSmTHuyTMGy5nKyWRECYQUzKQUOlgBXpIBjTnIUku+anEYEm10yo
    TLKkoWDx06kkaERx9tf69nNXLevwMjqlhhjSrTk9POgxgVquN5BA5wVXE+thSy0G
    gA1aO17TYsVc4pwX1abHEgnO/m7XT8FIh8EUjzUlR+j+TLRT6RgrTWo1YDqnhtNM
    aciHcFRgthwzjnEvBIn0QbI3RrZDtM529yYcjVLuJzNd4gzGa28bCNHPyHzutFOD
    Q+ll00v96K4sBPRmpEsoKjf0FiyB6bUT+QAOnzohuF3a+GENVXJgPQJi4ehGcKbu
    hXVAQsKD5Dr/iszrdSTQI999oPnVG7Tz5yD2AHJWGPZgayzngG0ZXWcyAxeNssLB

    44 = :

    DW5rRJ0NqkDH+AOoZUVNTX+6JMOPEBFNANhz4GfQ0fYip/M1y1ZrFZrP/Rw10oX5
    hLf+Rs7qEveQCNGIFE2yn1ZajQkHq+j73IguGqIazUR9k/h0jQ3/c+jPq03pMhgh
    cGyCY2Q6JV7TvGKWzRVXHNOpcNFjvFMv6uMwpjlsbsocEBhJDshopOgd3JZqX5wK
    uhMRuW41wnECAEOb6qVl/EnmeAzr9QZcr4S+ueMca9+5LHOocHASACeKRg+eBI1R
    CqSHVgP9rOC7xgrD+u+QyptiGGJI84Ks+Fvrnfvg2v8FU80Brw2EVQliuKLB2Myw
    DLlLQaU+j8EemiXibTgzSkGSqiZYa8pIHycWrV4G2HblpCDhUAHlP5z8agNOb5b0
    omG9pwBzhtSCmaqqrYYHl6FGb0m12Wz1cwxOnNEoPEdvalLBMj2MaR05LGjHlgVq
    iNSLWQEdbK3e4LII3Fd1qT6Ppj+fd+B/NUomL1+cnb25IEfH5Ojtmx/Pj7+xz399
    OP02RhD4Dl7AgeR8vKVkDR4Q0AfRlRyzWkngUSXNqEUw9CLdySw6+5zxG+iblSR1
    jQ8YVAKZHJrYRRc6qHXJIFWA5aEOkdhJuumP3yKqMcW3SJ6kOFsipnDTozYCbpYV
    GXL7uAWq4UBOO16hrrMkl0F//0scfnkjKyA1XW+rgexlnamfvjz3aldWw5kYyy8b
    b6bY5JBC+xFlWIJmU9eZEQL9jjHlGPuDIur4ny+Pj785OXtlYunF0ekx+fYE/js/
    +dfxpxVRTlWj8ZRnm8zOU+plPI6XYF84WO1BNNhehCSw4507QsX2LfrUfniktPYc
    CJaG2hssb26g/X1MHOFccqK2JRKUgIzzEcU2JRcU1FnZ6dEnEGzOxmPHV+ME2DT9
    X2MM24qYKh1rga2wZ1qYoaLHATg8WIeqZRHUFfFDA/Sbk7fHLy/evP3pEDxME/PM
    fEc0DX5MSq3fBGCB4akz+M+ToDGz0RDGmTTdqRHUPEDF28Yn9asiVxdpMFfopKYO
    0g9NN1EPklrFUvDvy8vF54/AOS1tow1AR7nDpnCyXGGRZGk2+w+XwZ+Eb1v/ljhz
    qjK5hkylbhjUjI0NICohhQ2OwuyLkLFeyRSfQ4M5U0nbp3UjkG/rZTcg63RFOI+P
    MEWYih5iIOio8Y4ZrZuUNhMDi9yaAAyMjFv9QJ3q/bNA0kKiKGYobocn2Ba6c4Go
    cGTDuR6y+BuZsaAh33h62a7YR7NQ9ygCvxN8hQ25tYmmK9iqyqnoUO0NeExV7kDq
    tPERCr+Puu/20OW2+ypiwkcHW4uR5p4qZSumCL/q177SV4BnoK+/Mn3fFwRBoSP9
    bPRVzP5B2LbaUKE2YTmcJ6F9vGZqhqOIoVZy2qB+t9WIZWk3rwcNfS66KREy4rty
    hTmxtYvx6z4ka4EOc6Q3HWGIiniNg4WGpd4mkNoWqw89jrq7WErtfUgA2OSDgoxu
    53rD9Jcfft7/5W8fs8e7u/b4GOKTtPMP6/+Vdr6mJK9J42stTMj+6z8cMprX8ol7
    1SUJADGMX42jsJNz5lP2kMYcT3P9fk91bW/P2nTipYLnc6MH6Gxi3ZYIM3dOYTZY
    MVGOvkRwBKdP11H0uuTyExujYKKYSnNDA2jVb1jlwhueNDEpx/KbF0G/X7PX8PWH

    45 = :

    zk/wc/L6xSvb6bnP793tZVI3exIqcS6wb4N6Ww8jdNXX7cTOuRDbT2ei4KfZUS9r
    JYmmDIr5ZgN54I9ofIbN0/Q9vbrlYR7qC4wdz53u8Fv0Q3WrL9cMVGmV63X8VhVa
    SOvqQZy0uRtk7Xng41jCd8v0KfUqVBJRYasFeVLfl9N3EF2y7LitvpIwfc2h87K+
    f0FieHCv75nd63156+JJ//JBH6F7DQXMXW6bHzaUcq7fndCyrscriE/30BFDALNF
    tYQaWkEti6SiZj7q5q7NFw/Z3FjxaYERdAla36Uz6q2vHA7cr7vP3p6+9Q1S66Q7
    A4b0mPNBe3ze7001Ev7trsA8+DLKRKs5bM+OczQyeVeU3J2t1/jDje1wvrZsRY2+
    naWb6hqo7kr0xv59zP49KHtDSm/0nXFOvYPfby3TsLefV9VpE6JyLJ12HGh319zJ
    kgrJPJG1OsGJ9LMWQnD5MtoEjeN07tqMYRUeSmHer01Alx50bZBpDOJhDLzwnUTe
    +fnp02fPDg7+evDLJBH94nqaDeGx0b39M4259jDbt3Sm8WQfrz2onsR+H/g+aNwQ
    2259F4FK+b7JWc3laegq9GtK/8zqrprCP8ZWZccdAQE5SoNwgNJA4iDzv7gbflQY
    JQRH3nXsnu93UwwJvh+4JYSdvpawymvCpunwrljZtuVrHA6A4m6jotowkcWRnuJr
    LDjObJw04eZGCq1DrFaTnxDbN+LWnF+ZPo8m11kMZ6/iNuv7l2UhXxGZbcp82zqN
    DQ4ZvwSnuaSpvbcN7mi0o/9ADeiPEhkYkr6r78jvNCm/IwTewjE2o0kSIf8+sH6g
    Vbgzz+lmmVB9AMzayhm9j9kHHb2j2IB6Dt4+qFo+7lcd90FdtsPDiFwKfp0lrcv0
    /wV3LINvtjEAAA==
    ----END BASE64----

    はじめてマイナーモードを作ってみました。dired で上下2画面に割って、下
    側にファイルの内容を表示するものです。なんか、禿しくガイシュツな気もす
    るのですが、習作ということで許してやってください。

    ホントは画像も表示させるつもりでしたが、
    http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=thumbs
    を見て落ち込みましたので、とりあえず保留さしてもらいます。

    人の環境で動くかどうか不安なんですが。

    46 = :

    >>45
    insert-file-contents を使ってファイルの前の方だけを読み込むようにして、
    大きいファイルも表示できるようにした方がいい。
    そうするとコード変換がちょっと面倒だけどね。

    47 = :

    >>46
    ナルホドです。
    そうすれば読み込みの時間も減らせますね。
    暇を見つけてやってみます。

    :: bf-mode 切 でもディレクトリ移動時にbf-mode 入 になってしまう不具合
    :: を見つけてしまいますた。すんまそん。これも暇みつけて直しまふ。

    48 = :

    >45
    どっかで見たと思ったら広瀬さんのelisp本で
    やってたやつだ。

    49 = :

    >>48
    やっぱり既出でしたか。

    「やさしいEmacs‐Lisp講座」でしょうか。

    関係ないんですが、探してるうちに
    http://www.gentei.org/~yuuji/lispmind/
    へたどり着きました。

    コンスセルを「トロッコ」と「連結器」に例えているのが、すごく面白くて納
    得しつつ爆笑してしまいました。このシリーズ、再開してホスィです。

    あ、また脱線していく。

    50 = :

    大昔に作ったことがあったけど、元のアイデアは「秀見え」からだった。
    http://hide.maruo.co.jp/software/index.html
    diredの標準だと、n/C-n/Down, p/C-p/Up にそれぞれ同じキーバインディングがあるので、
    どれかに表示する機能をバインドすればいいだけ。


    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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