Tampilkan awal lingkup ketika di luar layar

12

Saya ingin menampilkan bagian pembuka lingkup ketika ini keluar dari layar.

Contoh:

namespace a  
{  
...  
--------------------- <- display frame 
...                 |  
}*                  | * when cursor is here display "namespace a" in the minibuffer
---------------------   or on screen

Ini bisa bekerja untuk banyak bahasa pemrograman tetapi saya terutama memikirkan C ++.

Untuk menjelaskan lebih banyak dan bagi mereka yang tahu VS, saya ingin fitur yang sama seperti apa yang ada untuk Visual Studio. yaitu memposisikan kursor di akhir lingkup menampilkan awal lingkup di bagian atas buffer edit.

Apakah fitur ini sudah ada di suatu tempat?

log0
sumber
Saya ingin tahu, apakah jawaban saya membantu?
Tu Do
@Tidak, ya! Saya hanya punya waktu untuk melihatnya. Saya sudah memiliki semantik dan hanya menyalakan mode global-semantik-stickyfunc bekerja dengan baik. Terima kasih. Masalah saya sekarang adalah bahwa warna tidak membuat judul baris dapat dibaca ..
log0

Jawaban:

14

Jika Anda menulis C / C ++ / Java / Emacs Lisp / Python, maka semantic-sticky-func-mode akan melakukan apa yang Anda inginkan.

CATATAN : Ini tampaknya bekerja dengan CEDET dari Git, bukan stok CEDET saat ini di Emacs 24.4. Untuk mendapatkan Emacs dari Git:

git clone http://git.code.sf.net/p/cedet/git cedet

Dan muat CEDET terlebih dahulu di atas segalanya di file init Anda:

(load-file (concat user-emacs-directory "/cedet/cedet-devel-load.el"))
(add-to-list 'load-path (concat user-emacs-directory "cedet/contrib"))
(load-file (concat user-emacs-directory "cedet/contrib/cedet-contrib-load.el"))

Saat diaktifkan, mode ini menunjukkan titik fungsi saat ini berada di baris pertama dari buffer saat ini. Ini berguna ketika Anda memiliki fungsi yang sangat panjang yang menyebar lebih dari satu layar, dan Anda tidak perlu menggulir ke atas untuk membaca nama fungsi dan kemudian gulir ke bawah ke posisi semula.

Ini menampilkan antarmuka fungsi penuh (tipe pengembalian, nama fungsi dan parameter), bukan hanya nama fungsi.

Untuk mengaktifkannya, masukkan kode ini ke file init Anda:

(require 'semantic)
(semantic-mode 1)
(global-semantic-stickyfunc-mode 1)

UPDATE : Salah satu masalah dengan saat ini semantic-stickyfunc-modeadalah tidak menampilkan semua parameter yang tersebar di beberapa baris. Untuk mengatasi masalah ini, saya membuat paket stickyfunc-enh .

DEMO :

Berikut ini adalah demo di C:

semantic-sticky-func-mode-c

Berikut ini adalah demo di Emacs Lisp:

semantic-sticky-func-mode-elisp

UPDATE : Atau, Anda dapat menggunakan helm-semantic-atau-imenu . Ketika Anda berada di dalam suatu fungsi dan menjalankan perintah, kursor ditempatkan tepat di fungsi dalam daftar, sehingga Anda selalu dapat melihat antarmuka fungsi penuh. DEMO:

  • Pertama, saya gunakan helm-semantic-or-imenuuntuk pindah ke fungsi helm-define-key-with-subkeysdan memindahkan titik di sana.

  • Kemudian, saya mulai helm-semantic-or-imenulagi dan helm-define-key-with-subkeyssudah dipilih sebelumnya.

  • Kemudian, saya memindahkan titik ke variabel helm-map dan mengeksekusi helm-semantic-or-imenulagi pada dua fungsi: helm-next-source dan helm-source-sebelumnya. Kali ini, alih-alih menunjukkan tag semantik saat ini yang sedang saya operasikan (yang merupakan helm-peta), ini menunjukkan dua tag lainnya di buffer Semantic Helm. Ini karena saya memberikan argumen awalan sebelum menjalankan perintah.

Juga demo ini ada di Emacs Lisp, ini bekerja untuk C / C ++ juga dan itu lebih fleksibel jika Anda memiliki antarmuka fungsi yang sangat panjang.

helm-semantik-atau-imenu

Tu Do
sumber
Bagaimana Anda membuat ini bekerja untuk Lisp (khususnya Elisp)? Saya mengevaluasi kode Anda emacs -Qtetapi saya tidak mendapatkan perilaku yang Anda jelaskan ketika saya telusuri, misalnya org.el,.
itsjeyd
Saya memperbarui jawabannya. Anda harus mencobanya dengan Semantic dari bzr.
Tu Do
1
Benar-benar keluar dari topik. Terima kasih telah memperkenalkan saya ke mode Nyan. Pengodean saya tidak akan pernah sama lagi.
purple_arrows
6

Anda dapat menghidupkan which-function-modedengan melakukan

M-x which-function-mode RET

Untuk menjadikan pengaturan ini permanen, tambahkan

(which-function-mode 1)

ke file init Anda.

Dari dokumentasi:

Toggle mode line display fungsi saat ini (mode Function Yang) [...]

Mode Fungsi mana yang merupakan mode minor global. Saat diaktifkan, nama fungsi saat ini terus ditampilkan di baris mode , dalam mode utama tertentu.

Catatan : Nama itu tidak benar-benar menyarankannya, tetapi ini tidak hanya berfungsi untuk "fungsi", tetapi juga untuk jenis cakupan lain. Misalnya, dalam org-mode, which-function-modemenampilkan judul subtree saat ini.

itu hanya
sumber
Terima kasih! Saya suka nama fungsi karena ditampilkan di baris mode. Namun beberapa kasus tidak bekerja dengan baik. Seperti metode dalam struct di namespace, nama namespace hanya ditampilkan
log0