[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Releft



大和です。

; Column blockの話はどこにも持って行きようがないので出なおすことに
; しました。

横方向のスクロールの話です。

現在ポイントのある位置が画面の中央に持ってくるために頻繁に
C-l(M-x recenter)
を押すことがあると思います。

recenterはポイントの縦方向移動に対する操作ですが、
横方向に対しても同様の機能があれば、複数のコラムブロックを持つ
ウェブページの閲覧に対して便利ではないかと考えました。
そのような機能をreleftという名前で実装して  "|"に割当てて
みました。

"|"を押すと, 現在のポイントの位置が現在選択されているウィンドウの
左に来るようにスクロールします。正確にはポイントの位置が`w3m-releft-offset'
コラムになるようにスクロールします。w3m-releft-offsetはカスタマイズ可能な
変数です。

読みたいコラムブロックの先頭にキーを移動すれば、読みたいコラムブロック
よりも左にあるコラムブロックをウィンドウの外においやることができます。
同様のことをw3m-scroll-leftでも可能ですが、コラムを手動で与える必要
がある操作が繁雑になります。

以上、実装した機能をアピールする文章を書いてみましたが、どんなもんでしょ
うか。横に広いページを読むと特に感じるのですが、横方向のスクロールをもっと
強化したいです。ただ具体的な強化方針は人によって好みが分れるかもしれません。

2001-11-24  Masatake YAMATO  <jet@gyve.org>

	* w3m.el (w3m-releft-offset): New option.
	(w3m-set-goal-column-when-releft): New option.
	(w3m-*-like-map): Bind "|" to 'w3m-releft.
	(w3m-releft, w3m-reset-goal-column): 
	New functions.


Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.513
diff -u -r1.513 w3m.el
--- w3m.el	2001/11/22 14:03:48	1.513
+++ w3m.el	2001/11/24 11:27:27
@@ -491,7 +491,8 @@
 (defcustom w3m-display-hook
   '(w3m-history-highlight-current-url
     w3m-move-point-for-localcgi
-    w3m-select-buffer-update)
+    w3m-select-buffer-update
+    w3m-reset-goal-column)
   "*Hook run at the end of `w3m-goto-url'."
   :group 'w3m
   :type 'hook)
@@ -627,6 +628,16 @@
   :group 'w3m
   :type 'integer)
 
+(defcustom w3m-releft-offset 4
+  "*Left side column offset used in w3m-releft."
+  :group 'w3m
+  :type 'integer)
+
+(defcustom w3m-set-goal-column-when-releft nil
+  "*Set the value for goal-column to current column when w3m-releft is invoked."
+  :group 'w3m
+  :type 'boolean)
+
 (defcustom w3m-use-form t
   "*Non-nil means form extension is activated. (EXPERIMENTAL)"
   :group 'w3m
@@ -3792,6 +3803,7 @@
     (define-key map "N" 'w3m-namazu)
     (define-key map ">" 'w3m-scroll-left)
     (define-key map "<" 'w3m-scroll-right)
+    (define-key map "|" 'w3m-releft)
     (define-key map "\\" 'w3m-view-source)
     (define-key map "=" 'w3m-view-header)
     (define-key map "s" 'w3m-history)
@@ -3888,6 +3900,7 @@
     (define-key map "?" 'describe-mode)
     (define-key map ">" 'w3m-scroll-left)
     (define-key map "<" 'w3m-scroll-right)
+    (define-key map "|" 'w3m-releft)
     (define-key map "." 'beginning-of-buffer)
     (define-key map "^" 'w3m-view-parent-page)
     (define-key map "]" 'w3m-next-form)
@@ -4110,6 +4123,25 @@
 	   w3m-horizontal-scroll-columns)))
     (call-interactively 'scroll-right)))
 
+(defun w3m-releft (&optional offset)
+  "Scroll left to make the point OFFSET column in the selected window.
+Default for OFFSET is specified by `w3m-releft-offset'."
+  (interactive "P")
+  (setq offset (if (null offset)
+		   w3m-releft-offset
+		 (prefix-numeric-value offset)))
+  (set-window-hscroll (selected-window) 0)
+  (let ((c (- (current-column) offset)))
+    (if (< c 0) (setq c 0))
+    (w3m-scroll-left c))
+  (if w3m-set-goal-column-when-releft
+      (set-goal-column nil)))
+
+(defun w3m-reset-goal-column (&rest args)
+  "Reset goal-column set in w3m-releft."
+  (if w3m-set-goal-column-when-releft
+      (set-goal-column t)))
+  
 (defun w3m-goto-mailto-url (url)
   (if (and (symbolp w3m-mailto-url-function)
 	   (fboundp w3m-mailto-url-function))