スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

goto-line実行時に markが変更されてしまう

 scroll-upとscroll-downは,バッファが一番下,あるいは上にある状態だとそれ以上カーソルを移動してくれません.個人的にその挙動が気になり,Emacs22の時は以下のようなadviceを定義していました.
  ;; バッファの先頭までスクロールアップ
  (defadvice scroll-up (around scroll-up-around)
    (interactive)
    (let* ( (start_num (+ 1 (count-lines (point-min) (point))) ) )
      (goto-char (point-max))
      (let* ( (end_num (+ 1 (count-lines (point-min) (point))) ) )
        (goto-line start_num )
        (let* ( (limit_num (- (- end_num start_num) (window-height)) ))
          (if (< (- (- end_num start_num) (window-height)) 0)
              (goto-char (point-max))
            ad-do-it)) )) )
  (ad-activate 'scroll-up)
  ;; バッファの最後までスクロールダウン
  (defadvice scroll-down (around scroll-down-around)
    (interactive)
    (let* ( (start_num (+ 1 (count-lines (point-min) (point)))) )
      (if (< start_num (window-height))
          (goto-char (point-min))
        ad-do-it) ))
  (ad-activate 'scroll-down)

 Emacs23でもそのまま使えると思っていたのですが,上記ロジック中のgoto-charが動作した瞬間に push-markが動作し,リージョン操作で非常に不自由しています.
 とりあえず,pop-markすれば直前の markに戻るようなので,以下のような adviceで逃げていますが,もっと良い方法はないものか悩んでいます.
  ;; 行指定移動で set-markを無効化
  (defadvice goto-line (after expand-after-goto-line activate compile)
    (pop-mark) )
スポンサーサイト

テーマ : UNIX/Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

リンク
最新コメント
カテゴリー
最近の記事
月別アーカイブ
ブログ内検索
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。