⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xrefselectablelinestextpanel.java

📁 emacs的一个非常有用的插件,叫xrefactory,可以实现source insight里的那种函数跳转.和cscope(跳回来不方便)配合使用,非常的不错.
💻 JAVA
字号:
package com.xrefactory.jedit;import java.awt.*;import javax.swing.*;import java.util.*;import javax.swing.border.*;import java.awt.event.*;import javax.swing.event.*;import javax.swing.text.*;import java.awt.event.*;public class XrefSelectableLinesTextPanel extends JTextArea {	DispatchData 	data;	int				lineOffset;	int 			lastSelectedLine = -1;	String			inspectOption;	String 			result="";	void renewSelection() {		try {			int cp = getCaretPosition();			int ln = getLineOfOffset(cp);			if (ln != lastSelectedLine) {				lastSelectedLine = ln;			}			setCaretPosition(getLineEndOffset(ln)-1);			moveCaretPosition(getLineStartOffset(ln));			getCaret().setSelectionVisible(true);		} catch (Exception ex) {		}	}	void inspectLine() {		try {			int cp = getCaretPosition();			int ln = getLineOfOffset(cp);			result = getText(getLineStartOffset(ln), getLineEndOffset(ln)-getLineStartOffset(ln)-1);			if (inspectOption!=null && !inspectOption.equals("")) {				DispatchData ndata = new DispatchData(data, this);				XrefCharBuffer receipt = ndata.xTask.callProcessSingleOpt(inspectOption + (ln+lineOffset), ndata);				Dispatch.dispatch(receipt, ndata);				renewSelection();			} else {				s.getProbableParent(XrefSelectableLinesTextPanel.this).setVisible(false);			}		} catch (Exception ee) {}	}	class XrefClassTreeMouseAdapter extends MouseInputAdapter implements KeyListener  {		void moveSelection(MouseEvent e) {			int y = e.getY();			int rh = getRowHeight();			try {				setCaretPosition(getLineStartOffset(y/rh));				renewSelection();			} catch (Exception ex) {}		}		public void  mouseClicked(MouseEvent e) {			inspectLine();		}		public void  mouseDragged(MouseEvent e) {			moveSelection(e);		}		public void  mouseMoved(MouseEvent e) {			moveSelection(e);		}		public void  keyPressed(KeyEvent e) {			int code = e.getKeyCode();			if (code==KeyEvent.VK_ESCAPE) {				result = "";				JDialog pd = s.getParentDialog(XrefSelectableLinesTextPanel.this);				if (pd!=null) pd.setVisible(false);			} else if (code==KeyEvent.VK_ENTER || code==KeyEvent.VK_SPACE) {				inspectLine();			}		}		public void  keyReleased(KeyEvent e){			renewSelection();			e.consume();		}		public void  keyTyped(KeyEvent e) {		}	}	public Dimension countPreferredSize() {		int nlc = getLineCount();		int height = nlc * getRowHeight();		if (height >= 300) {			return(new Dimension(500,300));		} else {			return(new Dimension(500,height));		}	}	public int getCaretLineShiftOffset() {		try {			int cp = getCaretPosition();			int ln = getLineOfOffset(cp);			return((ln+1) * getRowHeight());		} catch (Exception e) {			return(0);		}	}	XrefSelectableLinesTextPanel(String list, DispatchData data, String inspectOption, int lineOffset, int baseLine) {		super(list);		this.data = data;		this.lineOffset = lineOffset;		this.inspectOption = inspectOption;		setEditable(false);		setBackground(s.light_gray);		XrefClassTreeMouseAdapter ma = new XrefClassTreeMouseAdapter();		addMouseListener(ma);		// do not make selection, so one can copy paste from results		//& addMouseMotionListener(ma);		addKeyListener(ma);		try {			setCaretPosition(getLineStartOffset(baseLine));		} catch (Exception ee) {}	}	XrefSelectableLinesTextPanel(String inspectOption) {		this("", null, inspectOption, 1, 0);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -